我已经创建了一个表,我要在其中显示两个不同列表中的数据。
如果玩家列表中有 3 ,则 playersStats 列表中有 3 。>
问题:
我的问题是该对数据进行排序了。它们必须相关,但我无法实现。
在屏幕截图中,您可以查看3位玩家。
在订购数据之前,一切正确。
但是订购后,玩家会陷入困境。
我希望有人能帮助我,感谢您的帮助。
getRowsPlayers() {
final rows2 = new List.generate(widget.players.length, (int index) => new DataRow(
cells: [
new DataCell(new Text(widget.players[index].gameID, style: new TextStyle(color: Colors.black))),
new DataCell(new Text(widget.playersStats[index].goals.toString(), style: new TextStyle(color: Colors.black))),
]));
return rows2;
}
bool isSort = true;
Widget bodyData() => DataTable(
onSelectAll: (b) {},
sortColumnIndex: 1,
sortAscending: isSort,
columns: <DataColumn>[
DataColumn(
label: Text("PLAYERS"),
numeric: false,
onSort: (i, b) {
print("$i $b");
setState(() {
});
},
tooltip: "To display players",
),
DataColumn(
label: Text("GOALS"),
numeric: true,
onSort: (i, b) {
print("$i $b");
setState(() {
if(isSort){
widget.playersStats.sort((a, b) => b.goals.compareTo(a.goals));
widget.players.sort((a, b) => b.gameID.compareTo(a.gameID));
isSort = false;
} else {
widget.playersStats.sort((a, b) => a.goals.compareTo(b.goals));
widget.players.sort((a, b) => a.gameID.compareTo(b.gameID));
isSort = true;
}
});
},
tooltip: "To display goals",
),
],
rows: getRowsPlayers());
Widget players() {
return Container(
child: bodyData(),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: new AppBar(
title: new Text(widget.title.toUpperCase()),
centerTitle: true,
backgroundColor: widget.themeBackground,
),
body: new Container(
child: new Column(
children: <Widget>[
widget.type == 'GLOBAL'? global()
:
widget.type == 'COMPETITION' ? competition()
:
widget.type == 'FRIENDLY' ? friendly() : players()
],
),
),
);
}
答案 0 :(得分:1)
原因是因为PlayersStats
和Players
是不同的列表。
widget.playersStats.sort((a, b) => b.goals.compareTo(a.goals));
widget.players.sort((a, b) => b.gameID.compareTo(a.gameID));
PlayersStats按goals
排序,因此结果为[101 Goals, 100 Goals, 30 Goals]
玩家按照gameID
进行排序,因此结果为[RaiiLKilleR, RaiiKonN, Miriam]
这两个列表按其自身排序。因此结果不是您所期望的。 您需要将两个列表合并为一个列表,例如
class Player {
final String gameID;
final int goals;
Player({this.gameID, this.goals});
}
并致电
widget.playersStats.sort((a, b) => b.goals.compareTo(a.goals));
您的getRowsPlayers
将
getRowsPlayers() {
final rows2 = new List.generate(widget.players.length, (int index) => new DataRow(
cells: [
new DataCell(new Text(widget.players[index].gameID, style: new TextStyle(color: Colors.black))),
new DataCell(new Text(widget.players[index].goals.toString(), style: new TextStyle(color: Colors.black))),
]));
return rows2;
}
那么结果就是您的预期。
答案 1 :(得分:0)
首先创建对象:
class Data{
final String DataName;
Data({this.DataName});
}
然后使用Widget调用构建器中的列表
List<Data> myData= snapshot.data;
myData.sort((a, b) => a.DataName.compareTo(b.DataName));