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

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

配置完成后执行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:03