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

Flutter/Dart中如何修改Map列表中的指定元素

问题

我有一个Map类型的列表,想要通过元素的id修改对应元素的name值。给定的列表如下:

List items = [{'id':'01','name':'Rahul'},{'id':'02','name':'John'},{'id':'03','name':'Marry'}];

需要实现一个方法,点击按钮时根据传入的id更新对应元素的name,方法定义如下:

void editName(String id,String name){
  // 此处需实现根据id修改name的逻辑
} 

调用editName('02','Rose')后,期望得到的结果为:

[{'id':'01','name':'Rahul'},{'id':'02','name':'Rose'},{'id':'03','name':'Marry'}];
解决方案

提供几种实用的实现方式:

方式一:遍历列表直接修改

通过forEach遍历列表,匹配到目标id后直接更新name值:

void editName(String id, String name) {
  items.forEach((item) {
    if (item['id'] == id) {
      item['name'] = name;
    }
  });
}

方式二:精准定位目标元素

使用firstWhere直接找到匹配id的元素,搭配orElse处理无匹配的情况,避免报错:

void editName(String id, String name) {
  var targetItem = items.firstWhere(
    (item) => item['id'] == id,
    orElse: () => {}, // 无匹配时返回空Map
  );
  if (targetItem.isNotEmpty) {
    targetItem['name'] = name;
  }
}

方式三:生成新列表(不修改原列表)

如果需要保留原列表不变,可通过map生成包含更新后元素的新列表:

List editName(String id, String name) {
  return items.map((item) {
    return item['id'] == id ? {...item, 'name': name} : item;
  }).toList();
}

内容的提问来源于stack exchange,提问作者Murali Krishnan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:35:16