我的应用程序中有四个按钮。
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;
});
}
如果我删除了setState
和selectPlayer
中的print(newSelectedPlayers)
,
所有这些都相应地起作用。但是我需要知道是否已添加/删除播放器,因此这就是我更新状态的原因。
如果我这样做了setState
,那么在build
中,我尝试登录_selectedPlayers
,尽管它们不应该被添加,但从未被删除,即使它们不应该...或我想念一些东西...
谢谢!
答案 0 :(得分:1)
您真的不需要第二个newselectedplayers变量,只需在您的selectplayer功能内进行
setstate(() {
if (_selectedPlayers.contains(player)) {
_selectedPlayers.remove(player);
} else {
_selectedPlayers.add(player);
}
});
答案 1 :(得分:1)
从构建上下文中删除此List<String> players = ['player 1', 'player 2', 'player 3', 'player 4'];
,将其放在您的类名下;