带有可反射的颤振反射:需要工作示例

Cry*_*ser 7 android ios dart flutter

我想使用FlutterReflectable 包在跨平台(iOS、Android)项目中实现反射。为了保持二进制文件的简短,这个包使用了代码生成。

但是,按照这个包的教程/自述文件,我无法生成所需的代码,在这种情况下是文件 main.reflectable.dart。虽然我已经到了可以正常工作的地步,但代码生成以以下语句结束:

[INFO] Succeeded after 88ms with 0 outputs
Run Code Online (Sandbox Code Playgroud)

在下面,我尝试展示我所做的事情的可重复路径。为此,我将 flutter 移到了不同​​的路径并重新安装了它,但没有在 IntelliJ IDEA 中重新安装 flutter 插件。

如何重现/我做了什么?

I)像往常一样为 Mac安装 Flutter。在命令行上:

cd ~/development 
git clone -b beta https://github.com/flutter/flutter.git 
export PATH=/Users/yourname/development/flutter/bin:$PATH 
flutter doctor
Run Code Online (Sandbox Code Playgroud)

II)在 IntelliJ IDEA 中新建一个 Flutter 项目

  1. 选择SDK路径:/Users/yourname/development/flutter
  2. 选择项目位置:~/gitroot/PlayGround/reflectable_test_2
  3. 添加目录 entry_point 平行于 lib 目录
  4. 在目录 entry_point 中添加 dart 文件 main.dart
  5. https://github.com/dart-lang/reflectable 中的 main.dart 获取 main.dart 的内容(很多会显示为红色)
  6. 从 lib 目录中删除 main.dart(未选中“安全删除”和“在评论中搜索”)
  7. 删除测试目录下的widet_test.dart
  8. 在依赖项下的 pubspec.yaml 中添加“reflectable: any”
  9. 在 main.dart 中,单击运行并在即将出现的对话框中将入口点设置为 /Users/yourname/gitroot/PlayGround/reflectable_test_2/entry_point/main.dart

加载依赖项后,一些红色的摆动会消失,但不会出现在“import 'main.reflectable.dart';”中,因为该文件尚不存在。

III)尝试在命令行中使用 builder生成 main.reflectable.dart

cd /Users/yourname/gitroot/PlayGround/reflectable_test_2/
flutter packages pub run build_runner build entry_point
Run Code Online (Sandbox Code Playgroud)

请注意,教程只说而不是最后一行

pub run build_runner build DIR
Run Code Online (Sandbox Code Playgroud)

但是在 Flutter 项目中使用时使用的行确实是正确的。到目前为止,按照自述文件/教程,我得到了结果:

Package "build_runner" is not an immediate dependency.
Cannot run executables in transitive dependencies.
pub finished with exit code 65
Run Code Online (Sandbox Code Playgroud)

IV) 在 IntelliJ 中,在 pubspec.yaml 中的 dev_dependencies 中添加“build_runner: any”。再次在命令行上运行(flutter packages pub run build_runner build entry_point)。这导致输出:

[INFO] Generating build script...
[INFO] Generating build script completed, took 506ms

[INFO] Initializing inputs
[INFO] Building new asset graph...
[INFO] Building new asset graph completed, took 776ms

[INFO] Checking for unexpected pre-existing outputs....
[INFO] Checking for unexpected pre-existing outputs. completed, took 3ms

[INFO] Running build...
[INFO] Running build completed, took 7ms

[INFO] Caching finalized dependency graph...
[INFO] Caching finalized dependency graph completed, took 69ms

[INFO] Succeeded after 88ms with 0 outputs
Run Code Online (Sandbox Code Playgroud)

总而言之,没有错误,但它也没有创建文件 main.reflectable.dart (0 个输出)。我能做些什么来解决这个问题?

Eri*_*nst 6

也许唯一缺少的就是做

flutter packages pub run build_runner build entry_point/main.dart

或者添加一个build.yaml文件

targets: test_reflectable: builders: reflectable: generate_for: - entry_point/main.dart

编辑:是一个示例 repo,它可以作为 Flutter 中反射的一个非常简单的起点。

编辑 2:有一个支持入口点(“Dart 程序”)的位置白名单,但不在该列表中。尝试使用存在于白名单中的目录。pubentry_point