Flutter执行build_runner命令报非空特性错误及无限循环问题求解
Flutter build_runner 空安全相关报错解决方案
报错原因梳理
第一次报错原因
初始配置下Dart SDK版本下限低于2.12,默认未开启空安全特性,但项目中引入的json_serializable等代码生成器依赖版本要求使用空安全,因此触发特性不匹配报错,同时导致构建进程进入死循环无法结束。
修改SDK版本后报错原因
将SDK约束调整为>=2.12.0 <3.0.0后默认开启健全空安全,但项目中引入的build_runner、json_serializable、retrofit_generator等依赖版本过低,本身不支持空安全,因此触发空安全兼容报错。
具体解决步骤
- 第一步:清理本地缓存与旧构建产物
依次执行以下命令:flutter clean rm -rf .dart_tool - 第二步:升级所有代码生成相关依赖到支持空安全的版本
在pubspec.yaml中更新对应依赖的版本号,参考版本如下:
所有涉及代码生成的依赖都需要升级到适配空安全的版本,避免版本冲突。dependencies: json_annotation: ^4.8.1 retrofit: ^4.0.1 dev_dependencies: build_runner: ^2.4.8 json_serializable: ^6.7.1 retrofit_generator: ^7.0.8 - 第三步:重新拉取项目依赖
执行命令:flutter pub get - 第四步:执行代码生成命令
建议添加--delete-conflicting-outputs参数自动覆盖冲突的生成文件:
如果仍有个别依赖无法适配空安全,可添加禁用健全空安全的参数运行:flutter pub run build_runner build --delete-conflicting-outputsflutter pub run build_runner build --delete-conflicting-outputs --no-sound-null-safety
如果升级后出现依赖版本兼容问题,可在pubspec.yaml中添加dependency_overrides字段强制指定统一的兼容版本号。
内容的提问来源于stack exchange,提问作者Sagar Acharya
相关产品推荐
相关产品推荐

