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