Flutter中向List添加Map时所有元素被覆盖的问题求助
问题解决:Flutter中List添加Map后所有元素被更新的问题
问题原因
你遇到的问题本质是Dart中Map是引用类型:你一直在复用同一个map对象,每次调用map.addAll()只是修改这个对象的内容,然后把这个对象的引用重复添加到List里。List里的所有元素其实指向同一个Map实例,所以每次更新后,List里的所有"元素"看起来都变成了最新的数据。
解决方案
核心是每次添加时创建新的Map对象,而不是复用旧的引用,有两种常见实现方式:
方式1:直接创建新Map
每次点击按钮时,直接生成一个新的Map实例并添加到List:
// 创建新的Map对象,存储当前输入的数据 final newMap = { "sr_no": sr_no.text, 'f_name': first_name.text, "l_name": last_name.text, "occupation": occupation.text, "mobile_no": mobile_no.text }; print(newMap); list.add(newMap); print(list);
方式2:重置原有Map(适用于map是成员变量的场景)
如果你的map是类的成员变量,可以在每次添加后重新初始化它,确保下次使用的是新的实例:
// 重置map为新的空Map,避免复用旧引用 map = {}; map.addAll({ "sr_no": sr_no.text, 'f_name': first_name.text, "l_name": last_name.text, "occupation": occupation.text, "mobile_no": mobile_no.text }); print(map); list.add(map); print(list);
原理说明
通过上述方式,每次添加到List中的都是独立的Map实例,它们各自持有不同的输入数据,后续修改新的Map不会影响已经存在于List中的旧Map,自然就不会出现所有元素被同步更新的问题。
内容的提问来源于stack exchange,提问作者Neel_chodvadiya
相关产品推荐
相关产品推荐

