Flutter使用Freezed生成模型时提示无法为data字段生成toJson代码
报错原因
ResourceDataModel作为freezed数据类,缺少with _$ResourceDataModel的mixin绑定,导致json_serializable无法识别该类的序列化规则,无法为上层LanguageResourceResponseModel的data字段生成toJson代码。- 你当前使用的freezed 0.15.x版本要求,所有定义了
fromJson方法的freezed类都必须混入对应生成的mixin,才能正常对接json序列化能力。
解决步骤
- 修改代码,补全
ResourceDataModel的mixin声明,完整代码如下:
import 'package:freezed_annotation/freezed_annotation.dart'; part 'language_response_model.freezed.dart'; part 'language_response_model.g.dart'; @freezed abstract class LanguageResourceResponseModel with _$LanguageResourceResponseModel { const factory LanguageResourceResponseModel({ required String id, required List<ResourceDataModel> data, }) = _LanguageResourceResponseModel; factory LanguageResourceResponseModel.fromJson(Map<String, dynamic> json) => _$LanguageResourceResponseModelFromJson(json); } @freezed abstract class ResourceDataModel with _$ResourceDataModel { const factory ResourceDataModel({ required String key, required String value, }) = _ResourceDataModel; factory ResourceDataModel.fromJson(Map<String, dynamic> json) => _$ResourceDataModelFromJson(json); }
- 清理旧生成缓存,重新执行代码生成命令:
先运行flutter pub run build_runner clean清理历史生成文件,再运行flutter pub run build_runner build --delete-conflicting-outputs即可正常生成代码。
内容的提问来源于stack exchange,提问作者Cyrus the Great
相关产品推荐
相关产品推荐

