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

Flutter变量复用问题:清空divTemp导致divData数据丢失

问题解决:复用List临时变量时避免原数据被修改

问题根源

Dart中List是引用类型,当你将divTemp添加到divData时,并没有创建新的列表副本,而是把divTemp的内存引用存入了divData。因此后续调用divTemp.clear()或修改divTemp的内容,会直接同步影响divData中对应的列表数据。

解决方案:存储临时列表的副本

要复用divTemp同时不影响divData中的数据,只需要在将divTemp存入divData时,创建它的副本即可。Dart提供了多种创建List副本的方式:

  • divTemp.toList():快速创建一个新的列表副本
  • List.from(divTemp):显式创建副本(支持类型转换场景)

修改后的代码示例

调整_getDivData方法,在存入divData时使用副本:

Future<int> _getDivData() async {
  // 第一次填充数据并存入副本
  for(int i = 0; i < 10; i++){
       divTemp.add(i.toDouble()); // 注意转为double,匹配List<double>类型
  }       
  divData.addAll([{'D01': {"Deg": divTemp.toList()}}]); // 存储副本而非引用
  
  // 清空后复用divTemp
  divTemp.clear();
  
  // 第二次填充数据并存入副本
  for(int i = 0; i < 10; i++){
       divTemp.add((i + 1).toDouble());
  }       
  divData.addAll([{'D02': {"Deg": divTemp.toList()}}]); // 再次存储副本
  
  return 0; // 补充方法声明的返回值
}

额外注意点

  1. 原代码中divTemp是List<double>,但循环添加的是int类型值,需要显式转为double避免类型错误;
  2. _getDivData方法声明返回Future<int>,需补充return语句满足语法要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 15:46:30