如何在颤振中渲染列表内的列表?

Uro*_*ros 7 list widget dart flutter

我正在创建一个 flutter 应用程序,它应该显示团队列表,每个团队都是一个包含以下项目的对象

name: 细绳

players: 数组

name: 细绳

所以看起来像这样

List teams = [
      {
        'name': 'Team one',
        'players': [
          {
            'name': 'Team one player one',
          },
          {
            'name': 'Team one player two',
          },
          {
            'name': 'Team one player three',
          },
        ]
      },
      {
        'name': 'Team two',
        'players': [
          {
            'name': 'Team two player one',
          },
          {
            'name': 'Team two player one',
          },
          {
            'name': 'Team two player three',
          },
        ]
      },
    ];
Run Code Online (Sandbox Code Playgroud)

此外,在我的代码中,我正在迭代所有teamswith ListView,就像这样

  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        child: renderTeams(teams),
      ),
    );
  }
Run Code Online (Sandbox Code Playgroud)

看起来renderTeams()像这样:

  Widget renderTeams(List teams) {
    return ListView.builder(
      itemCount: teams.length,
      itemBuilder: (context, index) {
        return Padding(
          padding: EdgeInsets.all(10.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            mainAxisSize: MainAxisSize.min,
            children: [
              Text(teams[index]['name']),
              Row(
                children: <Widget>[
                  Flexible(
                    child: PlayerCard(
                      player: teams[index]['players'][0],
                    ),
                  ),
                  Flexible(
                    child: PlayerCard(
                      player: teams[index]['players'][1],
                    ),
                  ),
                  Flexible(
                    child: PlayerCard(
                      player: teams[index]['players'][2],
                    ),
                  ),
                ],
              )
            ],
          ),
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

这效果很好,一切都会相应地渲染。

但是,我想迭代每个团队成员,而不是单独添加每个玩家,所以我的renderTeams()看起来像这样:

  Widget renderTeams(List teams) {
    return ListView.builder(
      itemCount: teams.length,
      itemBuilder: (context, index) {
        return Padding(
          padding: EdgeInsets.all(10.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            mainAxisSize: MainAxisSize.min,
            children: [
              Text(teams[index]['name']),
              renderPlayers(teams[index]['players'])
            ],
          ),
        );
      },
    );
  }
Run Code Online (Sandbox Code Playgroud)

看起来renderPlayers()像这样:

  renderPlayers(players) {
    return Row(children: players.map((player) => {
        Flexible(
          child: PlayerCard(
            player: player,
          ),
      )
    }).toList());
  }
Run Code Online (Sandbox Code Playgroud)

这就是我的麻烦开始的地方,因为我遇到了类似的错误

type 'List<dynamic>' is not a subtype of type 'List<Widget>'

我已经用谷歌搜索过,但其他响应尝试修复类型,但这导致我陷入尝试修复我不理解的错误的无限循环。

有人有任何提示吗?提前致谢

Mic*_*ono 6

消除{ }

renderPlayers(players) {
  return Row(children: players.map((player) => 
      Flexible(
        child: PlayerCard(
          player: player,
      ),
    )
  ).toList());
}
Run Code Online (Sandbox Code Playgroud)

解释

=>方法return=> { ... }意味着返回一个函数(动态)。这就是为什么它被检测为List<dynamic>