如何从数组中删除现有项目
How to remove existing item from array
我的 app.Something 中有四个按钮,像这样
List<String> players = [
{'name': 'player 1'},
{'name': 'player 2'},
{'name': 'player 3'},
{'name': 'player 4'}
];
我正在迭代地图
return Row(
children: players
.map((player) => RaisedButton(
onPressed: () {selectPlayer(player)}
child: Text(player['name']),
))
.toList());
我的初始状态是这样的:
void initState() {
super.initState();
_selectedPlayers = [];
}
selectPlayer()
看起来像这样:
selectPlayer(player) {
if (_selectedPlayers.contains(player)) {
_selectedPlayers.remove(player);
} else {
_selectedPlayers.add(player);
}
List newSelectedPlayers = _selectedPlayers;
setState(() {
_selectedPlayers = newSelectedPlayers;
});
}
如果我删除 selectPlayer
中的 setState
和 print(newSelectedPlayers)
,
一切正常。但我需要知道玩家是否已经 added/removed,因此这就是我更新状态的原因。
如果,我做 setState
,那么,在 build
,我尝试记录 _selectedPlayers
,他们只是被添加,从未被删除,即使他们不应该.. . 或者我遗漏了什么...
谢谢!
您真的不需要第二个 newselectedplayers 变量,只需在您的 selectplayer 函数中执行此操作即可
setstate(() {
if (_selectedPlayers.contains(player)) {
_selectedPlayers.remove(player);
} else {
_selectedPlayers.add(player);
}
});
从构建上下文中删除此 List<String> players = ['player 1', 'player 2', 'player 3', 'player 4'];
,将其放在您的 class 名称下方;
我的 app.Something 中有四个按钮,像这样
List<String> players = [
{'name': 'player 1'},
{'name': 'player 2'},
{'name': 'player 3'},
{'name': 'player 4'}
];
我正在迭代地图
return Row(
children: players
.map((player) => RaisedButton(
onPressed: () {selectPlayer(player)}
child: Text(player['name']),
))
.toList());
我的初始状态是这样的:
void initState() {
super.initState();
_selectedPlayers = [];
}
selectPlayer()
看起来像这样:
selectPlayer(player) {
if (_selectedPlayers.contains(player)) {
_selectedPlayers.remove(player);
} else {
_selectedPlayers.add(player);
}
List newSelectedPlayers = _selectedPlayers;
setState(() {
_selectedPlayers = newSelectedPlayers;
});
}
如果我删除 selectPlayer
中的 setState
和 print(newSelectedPlayers)
,
一切正常。但我需要知道玩家是否已经 added/removed,因此这就是我更新状态的原因。
如果,我做 setState
,那么,在 build
,我尝试记录 _selectedPlayers
,他们只是被添加,从未被删除,即使他们不应该.. . 或者我遗漏了什么...
谢谢!
您真的不需要第二个 newselectedplayers 变量,只需在您的 selectplayer 函数中执行此操作即可
setstate(() {
if (_selectedPlayers.contains(player)) {
_selectedPlayers.remove(player);
} else {
_selectedPlayers.add(player);
}
});
从构建上下文中删除此 List<String> players = ['player 1', 'player 2', 'player 3', 'player 4'];
,将其放在您的 class 名称下方;