Как удалить существующий элемент из массива - PullRequest
0 голосов
/ 20 мая 2019

у меня в приложении четыре кнопки. Что-то вроде этого

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, они просто добавляются, а не удаляются, даже если они не должны ... или я что-то упускаю. ..

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Удалите это List<String> players = ['player 1', 'player 2', 'player 3', 'player 4']; из контекста сборки, поместите его прямо под именем вашего класса;

1 голос
/ 20 мая 2019

Вам действительно не нужна вторая переменная newselectedplayers, просто сделайте это внутри функции selectplayer

setstate(() {
  if (_selectedPlayers.contains(player)) {
    _selectedPlayers.remove(player);
  } else {
    _selectedPlayers.add(player);
  }
});
...