我在這樣的函式中創建了一個區域變數串列:
List<FirestoreUser> _members = [];
_members = Provider.of<GroupsData>(context, listen: false)
.members(widget.groupID!);
然后我創建了一個串列視圖來顯示串列:
ListView.builder(
shrinkWrap: true,
primary: false,
itemCount: _members.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(_members[index].name),
trailing: IconButton(
onPressed: () {
setState(() {
print("before remove :"
Provider.of<GroupsData>(context,
listen: false)
.members(widget.groupID!)
.toString());
_members.removeAt(index);
print("After remove :"
Provider.of<GroupsData>(context,
listen: false)
.members(widget.groupID!)
.toString());
});
},
icon: Icon(Icons.delete)),
);
},
),
但是當我試圖從變數串列“_members”中洗掉一個專案時,該專案也會從提供者的 groupData 串列中洗掉
![從串列中洗掉()影響串列由提供者獲得![撲]](https://img.uj5u.com/2022/02/28/1ceba3006ba4464e8fb8f5dc59fc7b07.png)
感謝您的幫助!
uj5u.com熱心網友回復:
這就是串列在 dart 中的作業方式。訪問串列list1 = list2提供對 的參考list2,而不是副本。
您可以使用該.toList()方法創建串列的副本,以便在對新串列進行更改時不會更新原始串列。
看這個例子:
void main() {
final List<int> list1 = [1,2,3];
print('list1: $list1'); // prints list1: [1, 2, 3]
// Provides a reference to list1
final list2 = list1;
print('list2: $list2'); // prints list2: [1, 2, 3]
list2.remove(2);
print('list1: $list1'); // prints list1: [1, 3]
print('list2: $list2'); // prints list2: [1, 3]
// Create a copy of list 1
final list3 = list1.toList();
list3.add(4);
print('list3: $list3'); // prints list3: [1, 3, 4]
print('list1: $list1'); // prints list1: [1, 3]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/434109.html
