remove() from list 会影响供应商获取的列表! [扑]
remove() from list impact the list got it by provider! [flutter]
我在这样的函数中创建了一个局部变量列表:
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 列表中删除
感谢您的帮助!
这就是列表在 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]
}
我在这样的函数中创建了一个局部变量列表:
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 列表中删除
感谢您的帮助!
这就是列表在 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]
}