Flutter执行build_runner命令时报Generator无法指向未迁移空安全库错误
flutter pub run build_runner 空安全校验报错解决 根因定位
你当前配置的 json_serializable: ^4.0.2 版本对生成目标代码有强制空安全要求,扫描到 lib/models/shipping_address/shipping_address.dart 中的 ShippingAddress 类仍为非空安全语法,直接触发了构建阻断。
结合你当前的Dart 2.12.0版本信息,这个报错本质是依赖版本和代码适配程度不匹配,不是构建工具本身的问题。
具体修复操作
- 选择一:给目标类补全空安全语法
打开报错指向的源文件,按Dart空安全规则调整类定义:- 把不可为空的字段声明为非空类型,在构造函数中用
required标记必传参数 - 把允许为空的字段在类型后加
?标记可空 - 保留类上的
@JsonSerializable()注解,不要删除生成器识别标记
调整完成后重新执行构建命令,即可跳过空安全校验完成代码生成。
- 把不可为空的字段声明为非空类型,在构造函数中用
- 选择二:降级到兼容非空安全的依赖版本
如果暂时不计划迁移项目整体空安全,可修改pubspec.yaml中的dev依赖配置:
将原本的json_serializable: ^4.0.2替换为json_serializable: ^3.5.0,这是官方最后一个支持非空安全项目的稳定大版本。
配置修改完成后依次执行:- 运行
flutter pub get拉取匹配版本的依赖 - 重新执行
flutter pub run build_runner build --delete-conflicting-outputs完成构建
- 运行
- 注意事项
降级依赖后要保证json_annotation和json_serializable版本匹配,不要出现4.x版本的json_annotation搭配3.x版本的json_serializable的错配情况,否则会触发新的依赖冲突报错。
内容的提问来源于stack exchange,提问作者Omar Fayad
相关产品推荐
相关产品推荐

