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

Flutter中List<Map<"String","String">>添加数据后所有元素相同问题求解

问题根本原因

Dart中对象类型默认是引用传递,你代码中仅创建了1个Map实例,循环中每次都是修改这个唯一Map实例的属性,再把同一个实例的引用添加到List中:

  • 整个过程List里存储的所有元素都指向同一个内存地址的Map对象
  • 每次修改Map的name属性,所有指向该实例的引用读取到的值都会同步更新
  • 循环结束后Map的name最终为test4(你示例中写的test5属于笔误,循环条件为i<5,i最大取值为4),所以遍历List读取所有元素时输出的都是同一个最终值

另外你的代码存在两个语法问题:

  1. Map泛型声明不需要给String加引号,正确写法是Map<String, String>
  2. 代码中mymap仅声明未初始化,直接运行会抛出空异常
正确实现方式

每次循环都创建一个新的独立Map实例,再添加到List中即可,示例代码:

List<Map<String, String>> myList = [];
for(int i=0;i<5;i++){
  // 每次循环新建独立的Map实例
  Map<String, String> mymap = {};
  mymap['name'] = 'test$i';
  myList.add(mymap);
  print(myList[0]); // 固定输出test0,不会随循环变化
}
for (int i=0;i<5;i++){
  print(myList[i]); // 依次输出test0、test1、test2、test3、test4
}
Flutter JSON操作补充说明

Flutter中有对应Android JSONObject、JSONArray的等价实现:

  • 对应JSONObject使用Map<String, dynamic>
  • 对应JSONArray使用List<dynamic>
    JSON序列化/反序列化可直接调用系统dart:convert库的jsonEncode、jsonDecode方法,无需引入额外第三方库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 23:54:04