Flutter使用Freezed新增类属性后build_runner构建失败如何解决
问题根因
这个报错是analyzer v0.41.2和meta v1.7.0版本不兼容导致:两个包都对TargetKind类型扩展了同名的displayString属性,作用域内无法判定优先使用哪一个;同时旧版本analyzer依赖的collection包没有内置commaSeparatedWithOr扩展方法,进而触发第二个报错。
解决方案
步骤1:处理依赖冲突
在项目的pubspec.yaml文件中添加依赖覆盖规则,强制使用兼容的包版本:
dependency_overrides: meta: 1.6.0
如果上面的配置仍然报错,可以同时锁定analyzer版本:
dependency_overrides: meta: 1.6.0 analyzer: 1.7.1
步骤2:修复Freezed类代码问题
你新增的age、updateAt、createAt三个属性没有标记可空也没有设置默认值,如果项目开启了空安全,后续生成代码会触发空类型报错,你可以按需选择以下两种修改方式:
- 标记为可空类型:
int? age, @DateTimeConverter() DateTime? updateAt, @DateTimeConverter() DateTime? createAt, - 补充
@Default注解设置默认值:@Default(0) int age, @DateTimeConverter() @Default(DateTime.now()) DateTime updateAt, @DateTimeConverter() @Default(DateTime.now()) DateTime createAt,
步骤3:重新执行构建命令
修改完成后执行以下命令重新构建:
flutter clean && flutter pub get && flutter pub run build_runner build --delete-conflicting-outputs
内容的提问来源于stack exchange,提问作者Aspas
相关产品推荐
相关产品推荐

