我正在通过使用两个名为mailList
和filteredMailList
的列表来创建一个过滤系统。第一次填充mailList
时,此代码运行:
setState(() {
filteredMailList.clear();
filteredMailList = mailList;
});
完成此操作后,即使我没有再次执行这两行,似乎我对
mailList
所做的任何更改都已复制到filteredMailList。例如://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
的元素,而实际上不引用完全相同的列表,因此仍然可以单独编辑每个列表? 最佳答案
在代码中,通过调用filteredMailList = mailList;
,实际上是在删除原始的filteredMailList列表(您对该列表不再有任何偏好)并将其更改为mailList。因此,filteredMailList和mailList都指向内存中的单个List
您可以从mailList创建一个克隆列表,例如:
filteredMailList = [...mailList]; // or filteredMailList = mailList.toList();
或保留原始引用并复制mailList中的所有项目
filteredMailList.clear();
filteredMailList.addAll(mailList);