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

Flutter Provider添加Map至List时元素被覆盖的问题解决

Flutter Provider+Firestore数据添加时列表元素被覆盖的问题解决

问题原因

  • Map引用共享:你在Provider中维护的inventorySellerData是同一个Map对象的引用,每次调用getInvSellerData只是修改这个Map内部的键值对,而非创建新的Map实例。当你把这个Map添加到本地列表时,列表里存的都是同一个Map的引用,后续修改这个Map会同步影响列表里所有已添加的元素,导致所有元素看起来都是最新的那组数据。

解决方法

1. 在Provider中每次生成新的Map实例

修改inv_provider.dart里的getInvSellerData方法,每次获取数据时创建新的Map对象替换原有引用:

// 修改后的getInvSellerData方法
void getInvSellerData(DocumentSnapshot doc) {
  // 创建全新的Map实例,不再复用旧引用
  inventorySellerData = {
    'sellerDate1': doc['date'],
    'sellerQty1': doc['qty'],
  };
  // 通知UI更新(如果需要)
  notifyListeners();
}

2. 添加到本地列表时创建Map副本

如果暂时无法修改Provider的逻辑,也可以在添加到本地列表时,对当前inventorySellerData做浅拷贝(对于简单键值对的Map足够):

// 在调用add的地方修改为:
localList.add(Map.from(inventorySellerData));
// 或者用扩展运算符简化:
localList.add({...inventorySellerData});

验证效果

完成上述修改后,两次点击ASSIGN按钮添加的数据会是两个独立的Map实例,本地列表最终会得到你期望的结果:

[{sellerDate1: 10/31/2022, sellerQty1: 50}, {sellerDate1: 11/25/2022, sellerQty1: 54}]

内容的提问来源于stack exchange,提问作者Kvu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:35:27