Flutter中List<Map<"String","String">>添加数据后所有元素相同问题求解
问题根本原因
Dart中对象类型默认是引用传递,你代码中仅创建了1个Map实例,循环中每次都是修改这个唯一Map实例的属性,再把同一个实例的引用添加到List中:
- 整个过程List里存储的所有元素都指向同一个内存地址的Map对象
- 每次修改Map的
name属性,所有指向该实例的引用读取到的值都会同步更新 - 循环结束后Map的
name最终为test4(你示例中写的test5属于笔误,循环条件为i<5,i最大取值为4),所以遍历List读取所有元素时输出的都是同一个最终值
另外你的代码存在两个语法问题:
- Map泛型声明不需要给String加引号,正确写法是
Map<String, String> - 代码中
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
相关产品推荐
相关产品推荐

