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

Flutter中列表嵌套添加问题:多次保存后数据重复

Flutter列表嵌套添加数据重复问题解决思路

问题根源

你遇到的是引用传递导致的数据覆盖:_d是Provider中的List对象,每次调用save()时,你添加到historyList的都是_d的内存引用,而非独立副本。当第二次修改_d的内容并保存时,之前添加的条目里的嵌套List会同步变化,因为它们指向同一个内存地址。

解决方法

核心是给嵌套的List创建独立副本,切断引用关联:

  1. 给_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();
}
  1. 处理可变自定义对象(如果有)
    如果_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();
}
  1. 验证效果
    修改后,第一次保存的嵌套List会是独立实例,后续修改_d不会影响已保存的历史数据,第二次保存的新条目也会是全新的内容。

内容的提问来源于stack exchange,提问作者Kamil Żebrowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:22:14