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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:48:30