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之外执行。嘿,谢谢您的时间。很遗憾,这并不能解决我的问题。嘿,谢谢你的时间。遗憾的是,这并不能解决我的问题。