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) => index == index);
也将删除您列表中的所有项目,因为 (index == index)
将始终为真。也许你得到了这部分未注释的错误?
用户列表的定义是什么?您将 lstUsers 分配给用户 lstUsers = users; users 是可修改的列表吗?
【参考方案1】:
去掉List users = [...]
之前的const。
您将用户声明为编译时常量。这就是它不可修改的原因。
在 dart 中,对象是通过引用传递的。当你写lstUsers = users;
时,lstUsers 成为用户的“视图”,然后也变得不可修改。
另一种避免这种情况的方法是:
lstUsers = users.toList()
。然后它为 lstUsers 提供从用户创建的新列表的值。
【讨论】:
不敢相信我看不到。 我编辑加入了另一种允许用户保持不变的方式。以上是关于Flutter(Dart) 无法从不可修改列表中删除的主要内容,如果未能解决你的问题,请参考以下文章
对 Flutter 应用程序的 getX dart 包中的 RxList 进行排序