list - Flutter List 值被无意更新
问题描述
在下面的代码中,“Second Sel Food Date”的打印日期应与“Initial Sel Food Date”匹配,但它们不匹配,因为“tempSelected[i].set_eatenDateTime = copyToDate.millisecondsSinceEpoch;” 正在更新这两个列表。如何防止 foodListSelected 被更新?foodListSelected 的初始值正在使用流提供程序传递到类中,如果这很重要的话。
List<FoodModel> tempSelected = new List();
for (var i = 0; i < foodListSelected.length; i++) {
tempSelected.add(foodListSelected[i]);
}
for (var i = 0; i < tempSelected.length; i++) {
print('Initital Sel Food Date: ' + DateFormat('E-MM-yyyy hh:mm:ss').format(DateTime.fromMillisecondsSinceEpoch(foodListSelected[i].eatenDateTime)));
DateTime eatenDateTime = DateTime.fromMillisecondsSinceEpoch(tempSelected[i].eatenDateTime);
DateTime copyToDate = DateTime(picked.year, picked.month, picked.day, eatenDateTime.hour, eatenDateTime.minute, eatenDateTime.second);
// ISSUE!!!!!
// This is some how setting foodListSelected[i].eatenDateTime as well.
tempSelected[i].set_eatenDateTime = copyToDate.millisecondsSinceEpoch;
tempSelected[i].set_selected = false;
_createFood('eaten_food', tempSelected[i]);
}
}
for (var i = 0; i < foodListSelected.length; i++) {
print('Second Sel Food Date: ' + DateFormat('E-MM-yyyy hh:mm:ss').format(DateTime.fromMillisecondsSinceEpoch(foodListSelected[i].eatenDateTime)));
foodListSelected[i].set_selected = false;
_updateEatenFood(foodListSelected[i]);
}
解决方案
您正在对两个列表中存在的同一个对象调用 mutator 方法。如果你想为第二个列表创建一个新的对象副本,你应该编写一个克隆当前对象的方法,并在你的第一个循环中使用它。
推荐阅读
- javascript - 根据我使用的浏览器,表格的行高会有所不同
- amazon-web-services - Redash 元数据数据库迁移
- html - flex-grow 最大值或缩小元素之间空间的边距
- regex - 十进制利率的正则表达式
- python - Python/Pandas/Timeseries : 如何定义工作开始时间/工作结束时间并提取工作时间?
- python-3.x - 合并函数如何调用merge_sort函数?
- c# - 如何从主题 MassTransit 消费
- typescript - 从 const 字符串数组中提取类型
- flutter - 删除 DropdownButton 的 Text 和 Trailer Icon 之间的空白
- azure - 无法从 SSMS 连接到 Azure Sql 数据库:“无法访问此服务器上的公共数据终结点...”