从JSON创建Contact对象异常:列表填充失败问题排查
问题原因及解决方法
错误核心
Dart的map方法是惰性求值的——它不会立即执行你传入的回调函数,而是返回一个待执行的Iterable对象。只有当你主动遍历这个Iterable(比如调用toList()、forEach(),或者用循环迭代)时,回调里的逻辑才会真正运行。你当前的代码仅调用了map但未触发遍历,导致contacts.add()完全没执行,最终列表为空。
修复方案
方案1:用forEach替代map(适合仅执行操作、无需返回新集合的场景)
直接遍历列表并执行添加操作,forEach会立即触发回调:
List<Contact> contacts = []; contactsJson.forEach((contact) => contacts.add(Contact.fromJson(contact)));
方案2:用map生成新列表并赋值(更简洁的函数式写法)
利用map转换每个JSON对象为Contact,再通过toList()触发遍历并生成最终列表,无需提前初始化空列表:
List<Contact> contacts = contactsJson.map((contact) => Contact.fromJson(contact)).toList();
方案3:强制遍历map的返回结果(不推荐,可读性差)
如果一定要用map,可以通过toList()强制触发遍历,但这种写法冗余,不如前两种直观:
contactsJson.map((contact) => contacts.add(Contact.fromJson(contact))).toList();
内容的提问来源于stack exchange,提问作者rozerro
相关产品推荐
相关产品推荐

