Flutter JSON转模型后属性返回null、列表长度正常问题如何解决
问题原因
- 命名构造函数
Item.fromMap的实现逻辑错误:你在构造函数内部创建了一个临时的Item对象,但没有将解析得到的属性赋值给当前类的实例,最终所有实例属性都保留默认的null值,这是属性返回null的核心原因。 packagescors字段解析存在两处错误:- 取值时错误使用了不存在的key
device_details,JSON响应中对应字段的key是packagescors - JSON返回的
packagescors是单个对象,但是类属性定义为List<Packagescors>?,类型完全不匹配
- 取值时错误使用了不存在的key
修复方案
1. 修正Item类的定义和fromMap逻辑
首先调整packagescors属性的类型,重写fromMap构造函数,正确为实例属性赋值:
class Item { Item({ this.sequenceno, this.id, this.chapter, this.title, this.packageDescription, this.ageLevel, this.pkgSequence, this.packagescors, }); int? sequenceno; String? id; String? chapter; String? title; String? packageDescription; List<int>? ageLevel; String? pkgSequence; // 修正类型:JSON中是单个对象不是数组 Packagescors? packagescors; // 用factory构造函数正确返回实例 factory Item.fromMap(Map<String, dynamic> map) { return Item( sequenceno: map["sequenceno"], id: map["_id"], chapter: map["chapter"], title: map["title"], packageDescription: map["package_description"], ageLevel: map["age_level"] != null ? List<int>.from(map["age_level"].map((x) => x)) : null, pkgSequence: map["pkg_sequence"], // 修正取值key,适配单个对象的解析 packagescors: map["packagescors"] != null ? Packagescors.fromMap(map["packagescors"]) : null, ); } Map<String, dynamic> toMap() => { "sequenceno": sequenceno, "_id": id, "chapter": chapter, "title": title, "package_description": packageDescription, "age_level": ageLevel, "pkg_sequence": pkgSequence, "packagescors": packagescors?.toMap(), }; }
2. 确认Packagescors类的fromMap逻辑正确
需要确保你定义的Packagescors类的fromMap构造函数实现规范,没有同样的临时对象问题,示例参考:
class Packagescors { List<int>? score; List<String>? date; Packagescors({this.score, this.date}); factory Packagescors.fromMap(Map<String, dynamic> map) { return Packagescors( score: map["score"] != null ? List<int>.from(map["score"]) : null, date: map["date"] != null ? List<String>.from(map["date"]) : null, ); } Map<String, dynamic> toMap() => { "score": score, "date": date, }; }
修改完成后重新运行代码即可正常读取title等属性的值。
内容的提问来源于stack exchange,提问作者Febin Johnson
相关产品推荐
相关产品推荐

