You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 11:03:22