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; // 补充方法声明的返回值 }
额外注意点
- 原代码中
divTemp是List<double>,但循环添加的是int类型值,需要显式转为double避免类型错误; _getDivData方法声明返回Future<int>,需补充return语句满足语法要求。
内容的提问来源于stack exchange,提问作者gputhige
相关产品推荐
相关产品推荐

