Search code examples
listfluttersetstate

How to remove existing item from array


i have four buttons in my app.Something like this

List<String> players = [
{'name': 'player 1'},
{'name': 'player 2'},
{'name': 'player 3'},
{'name': 'player 4'}
];

I'm iterating over a map

return Row(
        children: players
            .map((player) => RaisedButton(
                  onPressed: () {selectPlayer(player)}
                  child: Text(player['name']),
                ))
            .toList());

my initial state looks like this:

  void initState() {
    super.initState();

    _selectedPlayers = [];
  }

selectPlayer() looks like this:

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

    List newSelectedPlayers = _selectedPlayers;
    setState(() {
      _selectedPlayers = newSelectedPlayers;
    });
  }

If i remove setState in selectPlayer, and print(newSelectedPlayers),

it all works accordingly. But i need to know if player has been added/removed, and therefore that's why i update state.

If, i do setState, then, in build, i try to log _selectedPlayers, they just get added, never removed, even though they shouldn't... or i'm missing something...

Thanks!


Solution

  • Remove this List<String> players = ['player 1', 'player 2', 'player 3', 'player 4']; from inside the build context put it right under your class name;