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

Posted

技术标签:

【中文标题】带有可反射的颤振反射:需要工作示例【英文标题】:Flutter Reflection with Reflectable: working example needed 【发布时间】:2018-12-12 15:51:48 【问题描述】:

我想使用Flutter 和Reflectable package 在跨平台(iosandroid)项目中实现反射。为了保持二进制文件简短,这个包使用代码生成。

但是,在此包的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。它不会产生任何结果并以成功告终。

另外,请检查您的 ma​​in.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

【讨论】:

以上是关于带有可反射的颤振反射:需要工作示例的主要内容,如果未能解决你的问题,请参考以下文章

隐藏的 iCarousel 项目反射效果

具有每个图像反射的 iCarousel

反射异常 -反射需要的参数

Python 之 类的反射

反射简单入门

java中反射书写的步骤