Dart中如何修改List<Map<String,dynamic>>单个元素的指定值?
Dart中List.filled初始化Map列表导致修改全部元素的问题
问题本质
List.filled(4, {"gstatus": 1, "vermerk": ""})的核心问题是:它会把同一个Map对象的引用重复填充到列表的所有位置。列表里的4个元素其实指向的是同一个Map实例,修改任意一个元素的Map值,所有元素都会同步变化。
解决方法
方法1:用List.generate创建独立Map实例
List.generate的生成器函数会在每次迭代时创建新的Map,确保列表中每个元素都是独立对象:
void main() { late List<Map<String, dynamic>> deviceForm; deviceForm = List.generate(4, (_) => {"gstatus": 1, "vermerk": ""}); print(deviceForm); deviceForm[1].update('vermerk', (value) => 'test'); print(deviceForm); }
方法2:对List.filled的元素做副本处理
如果一定要用List.filled,可以通过map为每个元素创建Map副本:
void main() { late List<Map<String, dynamic>> deviceForm; deviceForm = List.filled(4, {"gstatus": 1, "vermerk": ""}) .map((originalMap) => Map.from(originalMap)) .toList(); print(deviceForm); deviceForm[1].update('vermerk', (value) => 'test'); print(deviceForm); }
验证结果
执行上述代码后,输出会符合预期:
[{gstatus: 1, vermerk: }, {gstatus: 1, vermerk: }, {gstatus: 1, vermerk: }, {gstatus: 1, vermerk: }] [{gstatus: 1, vermerk: }, {gstatus: 1, vermerk: test}, {gstatus: 1, vermerk: }, {gstatus: 1, vermerk: }]
内容的提问来源于stack exchange,提问作者mascy
相关产品推荐
相关产品推荐

