Flutter执行build_runner build命令报错且MoorDatabase.g.dart生成失败如何解决
解决方案
1. 修正SDK版本与空安全配置
第二个报错的核心原因是当前使用的Dart SDK版本要求启用空安全特性,和旧项目配置不匹配,按以下两种场景选择适配方案:
- 如果可以迁移项目空安全:打开项目根目录
pubspec.yaml,找到environment区块,将最低Dart SDK版本调整到2.12.0及以上:environment: sdk: '>=2.12.0 <3.0.0' - 如果不打算迁移空安全:将SDK约束降到2.11.x及以下,同时对应降级代码生成相关依赖到非空安全的历史版本:
- moor 降级到
^3.4.0 - build_runner 降级到
^1.12.2 - floor_generator 降级到
^1.2.0
- moor 降级到
配置完成后执行flutter clean + flutter pub get重新拉取依赖。
2. 解决依赖版本冲突
针对88个包版本不兼容的问题,直接在pubspec.yaml中添加dependency_overrides区块,强制指定兼容的核心依赖版本即可,示例配置:
dependency_overrides: analyzer: ^1.7.2 build: ^2.1.0 moor_generator: ^3.4.0
analyzer是多数代码生成器共同依赖的核心包,固定其适配版本可解决90%的交叉依赖冲突问题。
3. 执行代码生成
首先在项目根目录新建build.yaml,排除不需要生成代码的测试目录,避免测试文件触发不必要的报错:
targets: $default: builders: floor_generator:floor_generator: generate_for: exclude: - test/** moor_generator: generate_for: exclude: - test/**
随后执行带冲突清理的生成命令:
flutter pub run build_runner build --delete-conflicting-outputs
运行成功后会自动生成MoorDatabase.g.dart文件,第一个报错同步解决。
兜底方案
如果项目依赖过于陈旧完全无法适配当前Flutter版本,可安装FVM工具固定项目开发时对应的旧版Flutter SDK,绑定当前项目后再执行上述操作,即可完全规避高版本SDK带来的特性不兼容问题。
内容的提问来源于stack exchange,提问作者IBlackVikingl
相关产品推荐
相关产品推荐

