带有可反射的颤振反射:需要工作示例
Posted
技术标签:
【中文标题】带有可反射的颤振反射:需要工作示例【英文标题】:Flutter Reflection with Reflectable: working example needed 【发布时间】:2018-12-12 15:51:48 【问题描述】:我想使用Flutter 和Reflectable package 在跨平台(ios、android)项目中实现反射。为了保持二进制文件简短,这个包使用代码生成。
但是,在此包的tutorial/readme 之后,我无法生成所需的代码,在本例中为文件 main.reflectable.dart。虽然我已经达到了可以正常工作的地步,但代码生成以以下语句结束:
[INFO] Succeeded after 88ms with 0 outputs
在下面我尝试展示我所做的可重现的路径。为此,我将 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
II) 在 IntelliJ IDEA 中创建一个新的 Flutter 项目
-
选择 SDK 路径:/Users/yourname/development/flutter
选择项目位置:~/gitroot/PlayGround/reflectable_test_2
将目录 entry_point 添加到 lib 目录中
在目录entry_point中添加dart文件main.dart
从https://github.com/dart-lang/reflectable 的main.dart 中获取main.dart 的内容(很多会显示为红色)
从 lib 目录中删除 main.dart(未选中“安全删除”和“在 cmets 中搜索”)
删除测试目录下的widet_test.dart
在依赖项下的 pubspec.yaml 中添加“reflectable: any”
在 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
请注意,教程只说而不是最后一行
pub run build_runner build DIR
但使用的行确实是correct when used in a Flutter project。到目前为止,按照自述文件/教程,我得到了结果:
Package "build_runner" is not an immediate dependency.
Cannot run executables in transitive dependencies.
pub finished with exit code 65
IV) 在 IntelliJ 中,将“build_runner: any”添加到 pubspec.yaml 中的 dev_dependencies。在命令行上再次运行(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
总而言之,没有错误,但它也没有创建文件 main.reflectable.dart(0 个输出)。我该怎么做才能解决这个问题?
【问题讨论】:
您的解决方案是什么?我也有同样的问题。 @mohammad 我也在为此苦苦挣扎,只有在我添加了如下所示的 build.yaml 后它才对我有用,您可以从 Erik 链接到的示例存储库中复制它。或者从下面复制它,只需将 entry_point/main.dart 更改为 lib/main.dart 并保存在项目的根目录中。 【参考方案1】:也许唯一缺少的就是去做
flutter packages pub run build_runner build entry_point/main.dart
或添加build.yaml
文件
targets:
test_reflectable:
builders:
reflectable:
generate_for:
- entry_point/main.dart
编辑:Here 是一个 示例 repo,它可以作为 Flutter 中可反射的非常简单的起点。
编辑 2:whitelist 的位置有一个 pub
支持入口点(“Dart 程序”),而 entry_point
不在该列表中。尝试使用白名单中的目录。
【讨论】:
感谢您的回答,示例 repo 对我有用。上面的第一个建议似乎没有什么不同。第二个建议——在将目标修改为 reflectable_test_2 之后——似乎也没有什么不同。它仍然是 0 个输出。但由于最初的问题是要求一个工作示例,我标记了这个来解决这个问题。 我再次获取了示例 repo 并运行了 README.md 中描述的命令。它确实按我的预期生成代码。如果仍有问题,请在github.com/eernstg/reflectable-flutter 上创建问题。【参考方案2】:首先,确保您在 pubspec.yaml
中添加了这两个包dev_dependencies:
flutter_test:
sdk: flutter
build_runner: any
built_value_generator: any
如果只添加 build_runner。它不会产生任何结果并以成功告终。
另外,请检查您的 main.dart
//reflectable impoort statement should be like this
import 'main.reflectable.dart' show initializeReflectable;
void main()
// initialize Reflectable in main
initializeReflectable();
runApp(MyApp());
现在尝试使用命令构建
flutter packages pub run build_runner build DIR
如果它有效,那么你该死的幸运。
现在让我们手动添加一个 build.yaml 文件(与 pubspec.yaml 相同的目录)
targets:
$default:
builders:
reflectable:
generate_for:
- lib/main.dart
现在试试命令
flutter packages pub run build_runner build DIR
【讨论】:
以上是关于带有可反射的颤振反射:需要工作示例的主要内容,如果未能解决你的问题,请参考以下文章