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
相关产品推荐
相关产品推荐

