Поведение списка флаттера не такое, как ожидалось - PullRequest
0 голосов
/ 04 октября 2019

Я делаю систему фильтрации во флаттере, используя два списка, называемых mailList и filteredMailList. При первом заполнении mailList этот код запускается:

setState(() {
  filteredMailList.clear();
  filteredMailList = mailList;
});

Когда это сделано, кажется, что любые изменения, которые я делаю на mailList, реплицируются в FilterMailList, даже если у меня нетЯ снова выполнил эти две строки. Например:

//Assume that mailList = ["1", "2", "3"] and filteredMailList = []
filteredMailList = mailList
//I expect then mailList = ["1", "2", "3"] and filteredMailList = ["1", "2", "3"]
mailList.add("4")
//I expect then mailList = ["1", "2", "3", "4"] and filteredMailList = ["1", "2", "3"]
//However when this is run mailList = ["1", "2", "3", "4"] and filteredMailList = ["1", "2", "3", "4"]

Имеет ли это какое-то отношение к тому факту, что я не могу давать обоим спискам одинаковое содержимое, а вместо этого говорю, что они ссылаются на один и тот же список?

Можно ли сделать так, чтобы filteredMailList содержал только элементы mailList и не ссылался на один и тот же список, так что каждый из них можно редактировать независимо?

1 Ответ

1 голос
/ 04 октября 2019

в вашем коде, вызывая filteredMailList = mailList;, вы фактически удаляете свой оригинальный отфильтрованный список MailMailList (у вас больше нет ссылок на этот список) и меняете его на mailList. таким образом, FilterMailList и mailList указывают на один список в памяти

, вы можете создать список клонов из mailList, например:

filteredMailList = [...mailList]; // or filteredMailList = mailList.toList();

или сохранить исходную ссылку и скопировать все элементы из mailList * 1007. *

filteredMailList.clear();
filteredMailList.addAll(mailList);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...