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

Posted

技术标签:

【中文标题】Flutter(Dart) 无法从不可修改列表中删除【英文标题】:Flutter(Dart) cannot remove from unmodifiable list 【发布时间】:2021-11-22 22:42:17 【问题描述】:

我正在使用 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);
          );
     

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

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

      const List users = [

 "id": "p1",
 "name": "John Doe",
 "age": "44",
 "imageUrl":
    "assets/images/anastasia-vityukova-unsplash-blackandwhiteimage.png",
"profession": "Financial Consultant"
 ,
  ....
]

【问题讨论】:

你能告诉我们你到底遇到了什么错误吗? 可能与问题无关,但:lstUsers.remove(index)' will try to remove the item ìndex来自列表。你应该使用lstUsers.removeAt(index)lstUsers.removeWhere((item) =&gt; index == index); 也将删除您列表中的所有项目,因为 (index == index) 将始终为真。也许你得到了这部分未注释的错误? 用户列表的定义是什么?您将 lstUsers 分配给用户 lstUsers = users; users 是可修改的列表吗? 【参考方案1】:

去掉List users = [...]之前的const。

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

在 dart 中,对象是通过引用传递的。当你写lstUsers = users;时,lstUsers 成为用户的“视图”,然后也变得不可修改。

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

【讨论】:

不敢相信我看不到。 我编辑加入了另一种允许用户保持不变的方式。

以上是关于Flutter(Dart) 无法从不可修改列表中删除的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Dart:如何更改类列表中类属性的值

对 Flutter 应用程序的 getX dart 包中的 RxList 进行排序

Flutter 中的列表视图

flutter Dart语言List如何获取索引值

如何使用 Dart / Flutter 中的列表从列表中删除重复元素?

Flutter / Dart:地图列表与小部件列表?哪个更好?