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

Dart中创建嵌套Map后添加元素长度始终为1的问题求助

问题原因与解决办法

核心问题

Dart的Mapkey具有唯一性,你每次调用addAll时都使用同一个外层key "keyname",这会直接覆盖该key对应的原有值,而非新增条目,所以外层Map的长度始终为1。

解决思路分两种场景:

场景1:每次点击要新增独立的外层条目

需要为每次添加的内容生成唯一的外层key,比如用递增计数器、时间戳或其他唯一标识:

// 定义一个类级别的计数器
int itemCounter = 0;

// 按钮点击事件内的代码
Mainclass.items.addAll({
  "keyname_${itemCounter++}" : {
    "firstvalue": 100, // 修正拼写错误:原firestvalue
    "secondvalue": 100
  }
});

这样每次点击都会新增一个以keyname_0、keyname_1...为key的条目,Map长度会随点击次数递增。

场景2:每次点击更新同一个外层key下的内层值

如果是要更新"keyname"对应的内层Map数据,而非新增外层条目,直接操作内层Map即可:

// 先确保外层key存在,不存在则初始化内层Map
if (!Mainclass.items.containsKey("keyname")) {
  Mainclass.items["keyname"] = {};
}

// 更新内层Map的具体值(替换成你每次要改变的数值)
Mainclass.items["keyname"]!["firstvalue"] = 150;
Mainclass.items["keyname"]!["secondvalue"] = 200;

如果需要保留内层Map原有其他值,仅更新指定字段,也可以用addAll更新内层:

if (!Mainclass.items.containsKey("keyname")) {
  Mainclass.items["keyname"] = {};
}

Mainclass.items["keyname"]!.addAll({
  "firstvalue": 150,
  "secondvalue": 200
});

额外提醒

代码中存在拼写错误:firestvalue 应为 firstvalue,建议修正以避免后续维护问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 03:15:03