如何从阵列中删除现有项目

时间:2019-05-20 16:24:04

标签: list flutter setstate

我的应用程序中有四个按钮。

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;
    });
  }

如果我删除了setStateselectPlayer中的print(newSelectedPlayers)

所有这些都相应地起作用。但是我需要知道是否已添加/删除播放器,因此这就是我更新状态的原因。

如果我这样做了setState,那么在build中,我尝试登录_selectedPlayers,尽管它们不应该被添加,但从未被删除,即使它们不应该...或我想念一些东西...

谢谢!

2 个答案:

答案 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'];,将其放在您的类名下;