Flutter(Dart) 无法从不可修改的列表中删除

Flutter(Dart) cannot remove from unmodifiable list

我正在使用 tinder 刷卡。它具有以下 属性:

          swipeCompleteCallback:
               (CardSwipeOrientation orientation, int index) {
                    
                    updateStack(index);

               },
            ),

updateStack 函数:

    class _TinderCardsState extends State<TinderCards>
    with TickerProviderStateMixin {
      List lstUsers = [];
      int lstUsersLength = 0;
     
     @override
     void initState() {
          super.initState();
          setState(() {
            lstUsers = users;
            lstUsersLength = users.length;
          });
      }

      void updateStack(int index) {
          setState(() {
           
              lstUsersLength = lstUsersLength - 1;
              lstUsers.removeAt(index);
          });
     }

所以基本上只是试图从堆栈中删除最上面的卡片。即使它是有状态的小部件,我也会收到上述错误。 为什么会出现此错误?

数据(只是一个带有列表的飞镖文件,没有 class 或任何东西):

      const List users = [
{
 "id": "p1",
 "name": "John Doe",
 "age": "44",
 "imageUrl":
    "assets/images/anastasia-vityukova-unsplash-blackandwhiteimage.png",
"profession": "Financial Consultant"
 },
  ....
]

删除 List users = [...] 之前的常量。

您将用户声明为编译时常量。这就是它不可修改的原因。

在 dart 中,对象是通过引用传递的。当您编写 lstUsers = users; 时,lstUsers 成为 'view' 个用户,然后也变得不可修改。

另一种避免这种情况的方法是: lstUsers = users.toList()。然后它为 lstUsers 提供从用户创建的新列表的值。

这是一个简单的解决方案

由于您的列表是不可变的,因此您必须创建一个新列表,但如果原始列表只是制作副本,则不要将其设为实例。

List<OnlineChannelUser> userList = List.from(response.data); 
userList.removeWhere((item) => item.uid == currentUid);
print(userList);  //new modified list