Создание нового списка из существующего списка во флаттере; изменяет оба списка при действии в новом списке
Я делаю список в трепетании из существующего списка, и когда я использовал этот новый список и выполнял некоторые действия с ним, например, изменял его параметр количества, он также изменял параметр существующего списка. Может кто-нибудь сказать мне, где я ошибаюсь.
Существующий список:
List<ItemsModel> originalList=[
ItemsModel(name: 'High Quality Double Spring Tummy Trimmer For Unisex',quantity: '30'),
ItemsModel(name: 'High Quality Double Spring Tummy Trimmer For Unisex',quantity: '30'),
ItemsModel(name: 'High Quality Double Spring Tummy Trimmer For Unisex',quantity: '30'),
];
Новый список:
List<ItemsModel> updatedItemList;
void initState() {
updatedItemList=[];
originalList.forEach((val){
updatedItemList.add(val);
});
super.initState();
}
на нажатой кнопке:
updatedItemList[i].quantity=qtyReceive
И на какой-то нажатой кнопке я выполняю это действие, которое обновляло оба списка. Почему??
2 ответа
Решение
Как упоминал @jamesdlin, создание глубокой копии решит проблему путем изменения ссылки на новый ItemsModel
object
с в list
.
Небольшой пример создания глубокой копии:
class ItemsModel{
String name;
String quantity;
ItemsModel({this.name,this.quantity});
}
void main() {
List<ItemsModel> originalList=[
ItemsModel(name: 'High Quality Double Spring Tummy Trimmer For Unisex',quantity: '30'),
ItemsModel(name: 'High Quality Double Spring Tummy Trimmer For Unisex',quantity: '30'),
ItemsModel(name: 'High Quality Double Spring Tummy Trimmer For Unisex',quantity: '30'),
];
List<ItemsModel> updatedItemList;
updatedItemList=[];
originalList.forEach((val){
//creating new ItemsModel objects and adding to the updatedList
updatedItemList.add(ItemsModel(name:val.name,quantity:val.quantity));
});
print('Original List');
for(var listItem in originalList){
listItem.quantity = '60';
print('${listItem.name},${listItem.quantity}');
}
print('Updated List');
for(var listItem in updatedItemList){
print('${listItem.name},${listItem.quantity}');
}
}
Я опаздываю на вечеринку, но в любом случае это может помочь кому-то еще, кто придет сюда.
myList = List.from(mynewlist);
вместо
mylist = mynewlist;