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

Flutter使用@freezed时提示无法为Media类型的medias生成toJson代码如何解决

解决方案

错误根本原因

freezed生成Account类的toJson方法时,无法识别Media类型的序列化逻辑,导致嵌套类型的序列化代码生成失败。

具体解决步骤

  • 第一步:检查Media类的配置是否完整
    如果你是把Media类单独定义在media.dart文件中,需要补充缺失的part声明:
    // media.dart 文件顶部添加
    import 'package:freezed_annotation/freezed_annotation.dart';
    
    part 'media.freezed.dart';
    part 'media.g.dart';
    
    // 原有Media类代码保持不变
    @freezed
    class Media with _$Media{
      const factory Media({
        required String shortCode,
        required int createdTime,
        //...
      })=_Media;
    
      factory Media.fromJson(Map<String, dynamic> json) =>
          _$MediaFromJson(json);
    }
    
    如果你把Media类和Account类写在同一个dart文件中,则不需要单独新增part声明,只要保证Media类已经定义了fromJson工厂方法即可。
  • 第二步:清除旧缓存重新生成代码
    在项目根目录执行以下命令,强制覆盖旧的生成文件:
    flutter pub run build_runner build --delete-conflicting-outputs
    
  • 第三步(可选,前两步未解决时使用):显式开启嵌套序列化规则
    给Account类的@freezed注解添加explicitToJson参数,强制freezed嵌套调用自定义类型的toJson方法:
    @Freezed(
      explicitToJson: true
    )
    class Account with _$Account{
      const factory Account({
        //...
        required List<Media> medias,
        //...
      })=_Account;
    
      factory Account.fromJson(Map<String, dynamic> json) =>
          _$AccountFromJson(json);
    }
    

完成上述操作后报错即可修复,Account类序列化时会自动调用每个Media实例的toJson方法完成嵌套数据转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:04