我的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
和print(newSelectedPlayers)
中删除setState
,
这一切都会相应地工作。但是我需要知道player是否已经被添加/删除,因此这就是我更新状态的原因。
如果,我执行setState
,那么,在build
中,我尝试记录_selectedPlayers
,它们只是被添加,而不是被删除,即使它们不应该被删除……或者我错过了什么..。
谢谢!
发布于 2019-05-22 21:10:56
从构建上下文中删除此List<String> players = ['player 1', 'player 2', 'player 3', 'player 4'];
,将其放在您的类名下面;
发布于 2019-05-21 00:47:36
您实际上不需要第二个newselectedplayer变量,只需在您的selectplayer函数中执行此操作即可
setstate(() {
if (_selectedPlayers.contains(player)) {
_selectedPlayers.remove(player);
} else {
_selectedPlayers.add(player);
}
});
https://stackoverflow.com/questions/56224789
复制相似问题