Flutter中Freezed类定义fromList方法如何避免代码生成冲突?
在Freezed中正确实现List转模型的fromList方法,避免代码生成异常
在Flutter开发中用Freezed定义模型时,直接在类内添加自定义工厂方法fromList会导致build_runner生成.g.dart文件时抛出异常,核心原因是Freezed的代码生成逻辑会自动处理工厂方法,自定义工厂方法会和它的序列化生成逻辑冲突。
解决方法:改用静态方法实现fromList
最稳妥的方式是把fromList定义为静态方法,而非工厂方法,完全避开Freezed的工厂方法处理逻辑:
修改后的完整代码:
@freezed abstract class SucceedDormitoryRoomPicturesModel with _$SucceedDormitoryRoomPicturesModel { factory SucceedDormitoryRoomPicturesModel({ // ignore: invalid_annotation_target @Default([]) List<DormitoryRoomPicturesModel> dormitoryRoomPicturesItemsList, }) = _SucceedDormitoryRoomPicturesModel; // 改为静态方法,避免与Freezed工厂方法生成逻辑冲突 static SucceedDormitoryRoomPicturesModel fromList(List<dynamic> jsonList) { final roomPicturesList = jsonList .map((item) => DormitoryRoomPicturesModel.fromJson(item as Map<String, dynamic>)) .toList(); return SucceedDormitoryRoomPicturesModel( dormitoryRoomPicturesItemsList: roomPicturesList); } }
额外注意事项
- 确保
DormitoryRoomPicturesModel已正确通过Freezed+json_serializable实现fromJson方法,否则map转换时会报错。 - 重新运行build_runner时建议加上
--delete-conflicting-outputs参数,清理旧的生成文件:
flutter pub run build_runner build --delete-conflicting-outputs
内容的提问来源于stack exchange,提问作者Pouria Moradi
相关产品推荐
相关产品推荐

