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

QuickType生成的Dart模型空安全错误修复求助

修复Dart模型中Datum?无法赋值给Datum的错误

错误原因

Hissedetay类的data字段定义为Map<String, Datum>(不允许值为null),但在fromJson工厂方法中,当v == null时返回了null,导致类型不匹配。


修复方案

方案一:确保data值不为null(推荐,适用于接口返回的data无null值场景)

修改Hissedetay.fromJson中的映射逻辑,移除返回null的分支,直接解析Datum:

factory Hissedetay.fromJson(Map<String, dynamic> json) => Hissedetay(
  code: json["code"],
  data: Map.from(json["data"]).map((k, v) => MapEntry<String, Datum>(k, Datum.fromJson(v))),
);

同时可以简化toJson方法(因为data的值不会为null):

Map<String, dynamic> toJson() => {
  "code": code,
  "data": Map.from(data).map((k, v) => MapEntry<String, dynamic>(k, v.toJson())),
};

方案二:允许data值为null(适用于接口返回的data可能存在null值场景)

将Hissedetay的data字段类型改为Map<String, Datum?>,允许存储null值:

class Hissedetay {
  Hissedetay({
    required this.code,
    required this.data,
  });

  String code;
  Map<String, Datum?> data; // 修改字段类型

  factory Hissedetay.fromJson(Map<String, dynamic> json) => Hissedetay(
    code: json["code"],
    data: Map.from(json["data"]).map((k, v) => MapEntry<String, Datum?>(k, v == null ? null : Datum.fromJson(v))),
  );

  Map<String, dynamic> toJson() => {
    "code": code,
    "data": Map.from(data).map((k, v) => MapEntry<String, dynamic>(k, v == null ? null : v.toJson())),
  };
}

内容的提问来源于stack exchange,提问作者Mıktad Tahir Durak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 22:06:26