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

Flutter循环存储数据后List所有元素变为最后一条的原因

问题解决:循环添加对象后列表所有元素均为最后一条记录

问题根源

你在循环外部仅创建了一个SalesData实例sd,每次循环只是修改该实例的partener和sales属性,随后将同一个实例添加到Global.dataChart列表中。由于列表存储的是对象引用,所有元素最终都指向最后一次修改的那个对象,导致循环结束后所有元素显示的都是最后一条记录的内容。

解决方案

每次循环迭代时,创建一个新的SalesData实例,而非复用同一个实例。这样列表中的每个元素都是独立的对象,不会互相覆盖属性值。

修改后的代码

class LoadData {
  loadSalesData() async {
    String optiune = 'gen';
    String numeServer = Global.server;
    String tabel = Global.tabel;
    List<SalesData> sData = [];
    Loader kk = Loader();
    kk
        .searchOnServer(tabel: tabel, numeServer: numeServer, optiune: optiune, dataInceput: "2022-06-30", dataSfarsit: "2022-07-23")
        .then((rezultat) async {
      try {
        rezultat = "[" + rezultat + "]";
       
        var _json = jsonDecode(rezultat);
        Global.dataChart = [];

        for (int i = 0; i < _json.length; i++) {
          // 每次循环创建新的SalesData实例
          SalesData sd = SalesData("", 0.00);
          sd.partener = _json[i]['partener'];
          sd.sales = double.parse(_json[i]['Sales']);
         
          Global.dataChart.add(sd);
          window.alert("Into for-loop $i:" + Global.dataChart[i].partener);
        }
        window.alert("Outside for-loop: " + Global.dataChart[0].partener);
        window.alert("Outside for-loop: " + Global.dataChart[1].partener);
      } catch (e) {
        print(e);
      }
    });
  }
}

// Global.dataChart 定义在单独类中:static List<SalesData> dataChart = [];
class SalesData {
  String partener;
  double sales;

  SalesData(this.partener, this.sales);
}

关键修改说明

将SalesData sd = SalesData("", 0.00);从循环外部移至循环内部,确保每次迭代都生成全新的SalesData对象。这样添加到列表中的每个元素都是独立的实例,各自持有对应的数据,不会出现所有元素指向同一对象的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 01:18:14