Flutter 从颤振列表视图中删除源列表中的项目
我开始学习颤振,并尝试编写一个应用程序 应用程序在SwitchListTile的ListView中有一个播放器列表。这是目前的工作。我正在尝试添加一个函数来从列表中删除一个玩家Flutter 从颤振列表视图中删除源列表中的项目,flutter,Flutter,我开始学习颤振,并尝试编写一个应用程序 应用程序在SwitchListTile的ListView中有一个播放器列表。这是目前的工作。我正在尝试添加一个函数来从列表中删除一个玩家 class PlayersSwitchListTilesContainer extends StatelessWidget { PlayersSwitchListTilesContainer({this.players}); final List<PlayerModel> players;
class PlayersSwitchListTilesContainer extends StatelessWidget {
PlayersSwitchListTilesContainer({this.players});
final List<PlayerModel> players;
@override
Widget build(BuildContext context) {
return Scaffold(
body: ListView(
children : players.map<Widget>((PlayerModel p){
return PlayerSwtichListTile(singlePlayer: p);
}).toList()
),
);
}
}
class PlayerSwtichListTile extends StatefulWidget {
PlayerSwtichListTile({this.singlePlayer});
final PlayerModel singlePlayer;
void removePlayer()
{
// What goes here ???
print('Delete ' + singlePlayer.playerName);
}
@override
_PlayerSwtichListTileState createState() => new _PlayerSwtichListTileState(player: singlePlayer);
}
class PlayerSwitchListTileContainer扩展了无状态小部件{
PlayerSwitchListTileContainer({this.players});
决赛选手名单;
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:ListView(
子级:players.map((PlayerModel p){
返回playerswtichlistile(单人:p);
})托利斯先生()
),
);
}
}
类PlayerSwichListTile扩展了StatefulWidget{
playerswtichlistile({this.singlePlayer});
最终玩家模型单人玩家;
void removePlayer()
{
//这里有什么???
打印('Delete'+singlePlayer.playerName);
}
@凌驾
_PlayerSwichListTilEstate createState()=>新建_PlayerSwichListTilEstate(播放器:singlePlayer);
}
此时,当我试图删除一个玩家时,它会调用正确的代码并打印该玩家的名字。但是,我很难看到如何从players
列表中删除该播放器
根据我的理解,如果任何人有任何提示,我将不胜感激。要从玩家列表中删除玩家,您可以这样做,但对于这种方法,您需要手动提供索引号:
setState(() {
players.removeAt(index);
});
更好的方法是使用listView.builder并向PlayerSwichListTile添加一个按钮,该按钮可以从listView.builder接收索引,这样每当您单击该按钮时,PlayerSwichListTile播放器就会被删除:
ListView.builder(
itemCount: players.length ?? 0,
itemBuilder: (context, index) {
return PlayerSwtichListTile(singlePlayer: p, index: index);}
)
class PlayerSwtichListTile extends StatefulWidget {
PlayerSwtichListTile({this.singlePlayer, this.index});
final int index;
final PlayerModel singlePlayer;
@override
_PlayerSwtichListTileState createState() => new _PlayerSwtichListTileState(player: singlePlayer);
}
class _PlayerSwtichListTile extends State<PlayerSwtichListTile > {
var player;
_PlayerSwtichListTile({this.player});
//call this function in ontap of that delete button
void removePlayer()
{
setState(() {
players.removeAt(widget.index);
});
}
@override
Widget build(BuildContext context) {
return Container();
}
}
ListView.builder(
itemCount:players.length±0,
itemBuilder:(上下文,索引){
return playerswtichlistile(singlePlayer:p,index:index);}
)
类PlayerSwichListTile扩展了StatefulWidget{
playerswtichlistile({this.singlePlayer,this.index});
最终整数指数;
最终玩家模型单人玩家;
@凌驾
_PlayerSwichListTilEstate createState()=>新建_PlayerSwichListTilEstate(播放器:singlePlayer);
}
类_playerswtichlistile扩展状态{
var播放器;
_playerSwichListTile({this.player});
//在删除按钮的ontap中调用此函数
void removePlayer()
{
设置状态(){
players.removeAt(widget.index);
});
}
@凌驾
小部件构建(构建上下文){
返回容器();
}
}
您应该使用ListView.builder
。设置状态也很有效这是否回答了您的问题?对迟迟没有答复表示歉意。生活妨碍了我们。谢谢,这给了我所需要的解决方案