You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 19:39:18