Создание нового списка из существующего списка во флаттере; изменяет оба списка при действии в новом списке - PullRequest
0 голосов
/ 20 июня 2020
• 1000 Может ли кто-нибудь сказать мне, где я ошибаюсь.

Существующий список:

  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

И на какой-то нажатой кнопке я выполняю это действие, которое обновляло оба списка. Почему ??

1 Ответ

1 голос
/ 20 июня 2020

Как упоминалось в @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}');
  }
}
...