Flutter 从颤振列表视图中删除源列表中的项目

Flutter 从颤振列表视图中删除源列表中的项目,flutter,Flutter,我开始学习颤振,并尝试编写一个应用程序 应用程序在SwitchListTile的ListView中有一个播放器列表。这是目前的工作。我正在尝试添加一个函数来从列表中删除一个玩家 class PlayersSwitchListTilesContainer extends StatelessWidget { PlayersSwitchListTilesContainer({this.players}); final List<PlayerModel> players;

我开始学习颤振,并尝试编写一个应用程序

应用程序在SwitchListTile的ListView中有一个播放器列表。这是目前的工作。我正在尝试添加一个函数来从列表中删除一个玩家

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
。设置状态也很有效这是否回答了您的问题?对迟迟没有答复表示歉意。生活妨碍了我们。谢谢,这给了我所需要的解决方案