Flutter项目内置代码生成器遇dart:mirrors不支持编译报错的解决办法
解决Flutter代码生成中dart:mirrors不支持的问题
核心思路
把仅用于代码生成的逻辑从lib/目录移到项目根目录下的独立文件夹(比如tool/generators/或build/)就行。因为lib/下的代码会被打包到Flutter应用里,而移动端运行时不支持dart:mirrors;独立目录下的代码只在代码生成阶段执行,不会被编译进最终应用。
具体操作步骤
迁移生成器代码
在项目根目录新建tool/generators/文件夹,把原来lib/里的生成器类、相关代码全移过去,然后调整文件内部的导入路径,保证引用正常。调整依赖配置
确保source_gen、build、build_runner这些代码生成相关的依赖都放在pubspec.yaml的dev_dependencies下,别放到dependencies里,这样它们只在开发阶段生效,不会被打包到应用:dev_dependencies: build_runner: ^2.4.6 source_gen: ^1.4.0 build: ^2.4.1 flutter_test: sdk: flutter配置build.yaml
修改项目根目录的build.yaml,指定生成器的路径为新的独立目录,示例配置如下,记得替换成你自己的生成器信息:targets: $default: builders: custom_generator: import: "tool/generators/my_generator.dart" builder_factories: ["myGeneratorFactory"] build_extensions: {".dart": [".g.dart"]} auto_apply: dependents build_to: source执行代码生成
正常运行代码生成命令就可以了:flutter pub run build_runner build
额外提醒
- 别在
lib/的业务代码里导入生成器相关文件,避免把dart:mirrors的依赖带进应用编译流程。 - 如果生成器需要引用
lib/里的注解类、实体类,直接导入就行,这些是应用代码的一部分,不会引入dart:mirrors问题。
内容的提问来源于stack exchange,提问作者Fabrizio
相关产品推荐
相关产品推荐

