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

who*_*dar 5 crud list dart flutter

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

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

               },
            ),
Run Code Online (Sandbox Code Playgroud)

更新堆栈函数:

    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);
          });
     }
Run Code Online (Sandbox Code Playgroud)

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

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

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

Tan*_*guy 10

删除之前的 const List users = [...]

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

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

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