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]

}