Flutter:正确查看嵌套列表数据:已编辑 #2
Flutter : View nested list data correctly : Edited #2
在我之前的问题中,我成功地收到了嵌套列表并将它们插入到列表中,现在当我想展示它们时,我使用了下面的这种方式:
打印时列表:
[
{m_date: 2020-09-01,
games: [
{id: 1,
s_id: 1,
w_id: 1,
league_name: 1,
home_team: MNU,
away_team: MCI,
home_goals: 0,
away_goals: 0,
m_hour: 22:42:00,
home_ex: 4,
away_ex: 3
},
{id: 2,
s_id: 1,
w_id: 1,
league_name: 1,
home_team: ARS,
away_team: CHL,
home_goals: 0,
away_goals: 0,
m_hour: 23:43:00,
home_ex: 1,
away_ex: 2
}]},
{m_date: 2020-09-02,
games: [{
id: 4,
s_id: 1,
w_id: 1,
league_name: 3,
home_team: BAR,
away_team: RMA,
home_goals: 0,
away_goals: 0,
m_hour: 23:44:00,
home_ex: 0,
away_ex: 3},
{id: 3,
s_id: 1,
w_id: 1,
league_name: 2,
home_team: JUV,
away_team: ROM,
home_goals: 0,
away_goals: 0,
m_hour: 22:43:00,
home_ex: 1,
away_ex: 4}]}]
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (ctx, index) {
return Column(
children: [
Text(snapshot.data[index].m_date),
ListView.builder(
shrinkWrap: true, // 1st add
physics: ClampingScrollPhysics(),
itemCount: snapshot.data[index].games.length,
itemBuilder: (ctx, index2) {
return Table(columnWidths: {
0: FlexColumnWidth(4),
1: FlexColumnWidth(3),
2: FlexColumnWidth(3),
3: FlexColumnWidth(3),
4: FlexColumnWidth(3),
5: FlexColumnWidth(3),
6: FlexColumnWidth(3),
7: FlexColumnWidth(2),
8: FlexColumnWidth(1),
}, children: [
TableRow(children: [
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
])
]);
})
],
);
},
);
列表现在包含两个日期行和每个日期的两个嵌套行,这意味着视图必须是这样的
date1
yyyyyyyyy
yyyyyyyyy
date2
yyyyyyyyy
yyyyyyyyy
但对我来说,视图是每个日期的嵌套列表(游戏)视图的所有数据,例如这张图片:
问题出在第二个 ListView 构建器中,它获取游戏的所有数据,我只想获得依赖于第一个 ListView 构建器的游戏 m_date
第二个循环的长度必须是 2(作为我的数据)但它需要所有游戏长度 4
任何有想法的人都可以帮助我,谢谢
我自己解决了。首先,我将日期添加到游戏列表以将其与主列表的日期进行比较。然后我改变了显示数据的方式并添加 if 语句以仅显示同一日期的值:
return FutureBuilder(
future: getmatchs(),
builder: (ctx, snapshot) {
if (snapshot.connectionState == ConnectionState.none ||
snapshot.connectionState == ConnectionState.waiting ||
snapshot.connectionState == ConnectionState.active ||
snapshot.data == null) {
return Center(
child: CircularProgressIndicator(strokeWidth: 6.0),
);
} else {
var list = snapshot.data;
return ListView(
children: list.map<Widget>((item) {
return Column(children: [
Text(item.m_date),
for (var i = 0; i < games.length; i++)
if (item.m_date == item.games[i].my_date)
Table(
columnWidths: {
0: FlexColumnWidth(4),
1: FlexColumnWidth(3),
2: FlexColumnWidth(3),
3: FlexColumnWidth(3),
4: FlexColumnWidth(3),
5: FlexColumnWidth(3),
6: FlexColumnWidth(3),
7: FlexColumnWidth(2),
8: FlexColumnWidth(1),
},
children: [
TableRow(children: [
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
])
],
)
]);
}).toList(),
);
}
});
}
}
在我之前的问题中,我成功地收到了嵌套列表并将它们插入到列表中,现在当我想展示它们时,我使用了下面的这种方式: 打印时列表:
[
{m_date: 2020-09-01,
games: [
{id: 1,
s_id: 1,
w_id: 1,
league_name: 1,
home_team: MNU,
away_team: MCI,
home_goals: 0,
away_goals: 0,
m_hour: 22:42:00,
home_ex: 4,
away_ex: 3
},
{id: 2,
s_id: 1,
w_id: 1,
league_name: 1,
home_team: ARS,
away_team: CHL,
home_goals: 0,
away_goals: 0,
m_hour: 23:43:00,
home_ex: 1,
away_ex: 2
}]},
{m_date: 2020-09-02,
games: [{
id: 4,
s_id: 1,
w_id: 1,
league_name: 3,
home_team: BAR,
away_team: RMA,
home_goals: 0,
away_goals: 0,
m_hour: 23:44:00,
home_ex: 0,
away_ex: 3},
{id: 3,
s_id: 1,
w_id: 1,
league_name: 2,
home_team: JUV,
away_team: ROM,
home_goals: 0,
away_goals: 0,
m_hour: 22:43:00,
home_ex: 1,
away_ex: 4}]}]
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (ctx, index) {
return Column(
children: [
Text(snapshot.data[index].m_date),
ListView.builder(
shrinkWrap: true, // 1st add
physics: ClampingScrollPhysics(),
itemCount: snapshot.data[index].games.length,
itemBuilder: (ctx, index2) {
return Table(columnWidths: {
0: FlexColumnWidth(4),
1: FlexColumnWidth(3),
2: FlexColumnWidth(3),
3: FlexColumnWidth(3),
4: FlexColumnWidth(3),
5: FlexColumnWidth(3),
6: FlexColumnWidth(3),
7: FlexColumnWidth(2),
8: FlexColumnWidth(1),
}, children: [
TableRow(children: [
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
])
]);
})
],
);
},
);
列表现在包含两个日期行和每个日期的两个嵌套行,这意味着视图必须是这样的
date1
yyyyyyyyy
yyyyyyyyy
date2
yyyyyyyyy
yyyyyyyyy
但对我来说,视图是每个日期的嵌套列表(游戏)视图的所有数据,例如这张图片:
问题出在第二个 ListView 构建器中,它获取游戏的所有数据,我只想获得依赖于第一个 ListView 构建器的游戏 m_date 第二个循环的长度必须是 2(作为我的数据)但它需要所有游戏长度 4
任何有想法的人都可以帮助我,谢谢
我自己解决了。首先,我将日期添加到游戏列表以将其与主列表的日期进行比较。然后我改变了显示数据的方式并添加 if 语句以仅显示同一日期的值:
return FutureBuilder(
future: getmatchs(),
builder: (ctx, snapshot) {
if (snapshot.connectionState == ConnectionState.none ||
snapshot.connectionState == ConnectionState.waiting ||
snapshot.connectionState == ConnectionState.active ||
snapshot.data == null) {
return Center(
child: CircularProgressIndicator(strokeWidth: 6.0),
);
} else {
var list = snapshot.data;
return ListView(
children: list.map<Widget>((item) {
return Column(children: [
Text(item.m_date),
for (var i = 0; i < games.length; i++)
if (item.m_date == item.games[i].my_date)
Table(
columnWidths: {
0: FlexColumnWidth(4),
1: FlexColumnWidth(3),
2: FlexColumnWidth(3),
3: FlexColumnWidth(3),
4: FlexColumnWidth(3),
5: FlexColumnWidth(3),
6: FlexColumnWidth(3),
7: FlexColumnWidth(2),
8: FlexColumnWidth(1),
},
children: [
TableRow(children: [
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
Container(child: Text('y')),
])
],
)
]);
}).toList(),
);
}
});
}
}