非空安全Flutter项目用freezed报参数未加required或@Default错误如何解决
解决方案
1. 优先修复依赖版本不匹配问题
你当前的主依赖和dev依赖里的freezed_annotation版本不一致,这是首要错误,且0.14+版本的freezed默认按空安全逻辑校验,不适配你的非空安全项目。
修改依赖如下:
environment: sdk: ">=2.7.0 <3.0.0" dependencies: flutter: sdk: flutter freezed_annotation: ^0.12.0 # 其他原有依赖保持不变 dev_dependencies: freezed: ^0.12.7 build_runner: ^1.12.2 # 高版本build_runner默认适配空安全,建议降级到1.x版本 retrofit_generator: ^2.0.1 # 配套非空安全版本 # 其他原有dev依赖保持不变
上述版本是经过验证的非空安全场景下稳定兼容的版本组合,不会触发空安全相关校验。
2. 若不想降级freezed版本,可修改模型类代码
如果你坚持使用0.14+版本的freezed,可给所有参数加上required关键字,或给参数配置默认值即可解决报错:
方案A:标记参数为必填
import 'package:freezed_annotation/freezed_annotation.dart'; part 'chart_daily_expanded_detailes_model.freezed.dart'; @freezed abstract class ChartDailyExpandedDetailesModel with _$ChartDailyExpandedDetailesModel { const factory ChartDailyExpandedDetailesModel({ required String title, required String testNumber, required String testPercentage, required String icon, }) = _ChartDailyExpandedDetailesModel; }
方案B:给参数设置默认值
import 'package:freezed_annotation/freezed_annotation.dart'; part 'chart_daily_expanded_detailes_model.freezed.dart'; @freezed abstract class ChartDailyExpandedDetailesModel with _$ChartDailyExpandedDetailesModel { const factory ChartDailyExpandedDetailesModel({ @Default('') String title, @Default('') String testNumber, @Default('') String testPercentage, @Default('') String icon, }) = _ChartDailyExpandedDetailesModel; }
3. 重新执行生成命令
修改完成后依次执行以下命令即可正常生成代码:
- 清理缓存:
flutter clean - 重新拉取依赖:
flutter pub get - 生成freezed代码:
flutter pub run build_runner build --delete-conflicting-outputs
内容的提问来源于stack exchange,提问作者Cyrus the Great
相关产品推荐
相关产品推荐

