You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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);
  }
}

额外注意事项

  1. 确保DormitoryRoomPicturesModel已正确通过Freezed+json_serializable实现fromJson方法,否则map转换时会报错。
  2. 重新运行build_runner时建议加上--delete-conflicting-outputs参数,清理旧的生成文件:
flutter pub run build_runner build --delete-conflicting-outputs

内容的提问来源于stack exchange,提问作者Pouria Moradi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 21:34:59