Flutter中列表嵌套添加问题:多次保存后数据重复
Flutter列表嵌套添加数据重复问题解决思路
问题根源
你遇到的是引用传递导致的数据覆盖:_d是Provider中的List对象,每次调用save()时,你添加到historyList的都是_d的内存引用,而非独立副本。当第二次修改_d的内容并保存时,之前添加的条目里的嵌套List会同步变化,因为它们指向同一个内存地址。
解决方法
核心是给嵌套的List创建独立副本,切断引用关联:
- 给_d创建浅拷贝
如果_d里的元素是基本类型(字符串、数字、布尔值),直接用List.from(_d)或_d.toList()生成副本即可:
void save() { List list = [_a, _b, _c, List.from(_d)]; historyDb.historyList.add(list); historyDb.updateHistory(); _isSave = false; notifyListeners(); }
- 处理可变自定义对象(如果有)
如果_a、_b、_c是自定义类的实例(而非基本类型),同样需要创建对象副本,避免引用覆盖。可以给自定义类实现copyWith方法:
// 示例自定义类的copyWith实现 class CustomItem { final String value; CustomItem(this.value); CustomItem copyWith({String? value}) { return CustomItem(value ?? this.value); } } // 修改save方法 void save() { List list = [_a.copyWith(), _b.copyWith(), _c.copyWith(), List.from(_d)]; historyDb.historyList.add(list); historyDb.updateHistory(); _isSave = false; notifyListeners(); }
- 验证效果
修改后,第一次保存的嵌套List会是独立实例,后续修改_d不会影响已保存的历史数据,第二次保存的新条目也会是全新的内容。
内容的提问来源于stack exchange,提问作者Kamil Żebrowski
相关产品推荐
相关产品推荐

