如何从数组中删除现有项目

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 中的 setStateprint(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 名称下方;