Dart:向Map键添加列表值后清空列表致Map值被清空问题
问题根源
Dart中列表属于引用类型,你将_myTimeSlots赋值给Map的value时,Map存储的是这个列表的内存引用,而非列表内容的副本。因此调用_myTimeSlots.clear()会直接修改Map中对应的列表实例,导致已保存的数据被清空。
解决方案
以下是两种可行的修复方式:
方式一:存储列表副本到Map
在将列表存入Map时,创建原列表的副本,这样Map和原列表指向不同的内存实例,后续清空原列表不会影响已保存的数据:
void onSave(BuildContext context, {required String day}){ // 使用toList()创建原列表的副本,存入Map selectedValues[day] = _myTimeSlots.toList(); // 清空原列表,用于存储下一组时间 _myTimeSlots.clear(); }
也可以用List.from(_myTimeSlots)替代toList(),效果一致。
方式二:重新初始化列表而非清空
保存完成后,直接创建一个新的空列表赋值给_myTimeSlots,原列表的引用会被保留在Map中,不受新列表的影响:
void onSave(BuildContext context, {required String day}){ selectedValues[day] = _myTimeSlots; // 重新创建空列表,替代原引用 _myTimeSlots = []; }
额外修正
原代码中selectedValues.add(mapVal)是错误写法,Map没有add方法,正确的添加键值对方式是直接赋值selectedValues[day] = ...,或者使用selectedValues.addAll(mapVal)(当你需要合并另一个Map时)。
内容的提问来源于stack exchange,提问作者vinchuli
相关产品推荐
相关产品推荐

