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
相关产品推荐
相关产品推荐

