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

List 如何从数组中删除现有项,list,flutter,setstate,List,Flutter,Setstate,我的应用程序中有四个按钮。类似这样的 List<String> players = [ {'name': 'player 1'}, {'name': 'player 2'}, {'name': 'player 3'}, {'name': 'player 4'} ]; 我的初始状态如下所示: void initState() { super.initState(); _selectedPlayers = []; } selectPlayer(playe

我的应用程序中有四个按钮。类似这样的

List<String> players = [
{'name': 'player 1'},
{'name': 'player 2'},
{'name': 'player 3'},
{'name': 'player 4'}
];
我的初始状态如下所示:

  void initState() {
    super.initState();

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

    List newSelectedPlayers = _selectedPlayers;
    setState(() {
      _selectedPlayers = newSelectedPlayers;
    });
  }
selectPlayer()
如下所示:

  void initState() {
    super.initState();

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

    List newSelectedPlayers = _selectedPlayers;
    setState(() {
      _selectedPlayers = newSelectedPlayers;
    });
  }
如果我在
selectPlayer
中删除
setState
,并
print(newSelectedPlayers)

这一切都是相应的。但我需要知道玩家是否已经被添加/删除,这就是我更新状态的原因

如果,我做了
setState
,那么,在
build
中,我尝试记录
\u selectedPlayers
,它们只会被添加,而不会被删除,即使它们不应该。。。或者我错过了什么


谢谢

您确实不需要第二个newselectedplayers变量,只需在selectplayer函数中执行此操作即可

setstate(){
如果(_selectedPlayers.contains(player)){
_选择的播放器。删除(播放器);
}否则{
_选择的玩家。添加(玩家);
}
});

您真的不需要第二个newselectedplayers变量,只需在selectplayer函数中执行此操作即可

setstate(){
如果(_selectedPlayers.contains(player)){
_选择的播放器。删除(播放器);
}否则{
_选择的玩家。添加(玩家);
}
});

删除此
列出玩家=['player 1'、'player 2'、'player 3'、'player 4']从构建上下文内部将其放在您的类名下

删除此
列表玩家=['player1'、'player2'、'player3'、'player4']从构建上下文内部将其放在您的类名下

删除此
列表玩家=['player1'、'player2'、'player3'、'player4']从构建上下文内部将其放在您的类名下;嘿@ikben,非常感谢你。这起作用了。我猜这是因为Flatter比较了列表中的一些内部索引,所以这就是为什么setState没有比较好的原因?你能告诉我更多关于这个的情况吗?谢谢真的很高兴,我能够帮助你。你应该知道的另一件事是,每次你设置状态时,你的应用程序都会重新加载小部件构建(BuildContext context)
中的所有内容。因此,当你想声明一个变量时,在构建上下文之外执行它。删除这个
列表玩家=['player 1','player 2','player 3','player 4'从构建上下文内部将其放在您的类名下;嘿@ikben,非常感谢你。这起作用了。我猜这是因为Flatter比较了列表中的一些内部索引,所以这就是为什么setState没有比较好的原因?你能告诉我更多关于这个的情况吗?谢谢真的很高兴,我能够帮助您。您应该知道的另一件事是,每次设置状态时,您的应用程序都会重新加载
@override Widget build(BuildContext context)
中的所有内容。因此,当您要声明变量时,请在build context之外执行。嘿,谢谢您的时间。很遗憾,这并不能解决我的问题。嘿,谢谢你的时间。遗憾的是,这并不能解决我的问题。