hou*_*uba 3 sorting datatable dart flutter
我在对 DataTable 中的列进行排序时遇到了严重的困难。
这是我的代码
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: DataTable(
sortColumnIndex: 0,
sortAscending: true,
columnSpacing: 5.0,
horizontalMargin: 10,
columns: [
DataColumn(label: Text('Col1'),
DataColumn(label: Text('Col2'),numeric: false ),
DataColumn(label: Text('Col3'),numeric: true ),
DataColumn(label: Text('Col4'), numeric: true),
DataColumn(label: Text('Col5'), numeric: true),
],
rows: myList
.map(
((element) => DataRow(
cells: <DataCell>[
DataCell(Text(element["Col1"]), placeholder: true,showEditIcon: false),
DataCell(Text(element["Col2"].toString())),
DataCell(Text(element["Col3"].toString())),
DataCell(Text(element["Col4"].toString())),
DataCell(Text(element["Col5"].toString())),
],
)),
).toList(),
),
));
Run Code Online (Sandbox Code Playgroud)
我还要做什么?理想情况下,我希望在用户按下的任何列上都有排序功能,但现在,我很高兴只有 1 列可以排序。
如您所见,我添加了约束:
sortColumnIndex: 0,
sortAscending: true,
Run Code Online (Sandbox Code Playgroud)
但我得到的只是第一列附近的箭头(ColumnIndex = 0)——当你按下它时,它实际上什么也没做。
我究竟做错了什么?
您必须在要排序的列中添加一个 'onSort: ,' 并调用排序函数。
bool sort;
DataTable(
sortAscending: sort,
sortColumnIndex: 0,
columns: [
DataColumn(
label: Text("Col1"),
onSort: (columnIndex, ascending) {
setState(() {
sort = !sort;
});
onSortColum(columnIndex, ascending);
}),
...
Run Code Online (Sandbox Code Playgroud)
和 onSortColum 函数:
onSortColum(int columnIndex, bool ascending) {
if (columnIndex == 0) {
if (ascending) {
yourDataList.sort((a, b) => a['name'].compareTo(b['name']));
} else {
yourDataList.sort((a, b) => b['name'].compareTo(a['name']));
}
}
}
Run Code Online (Sandbox Code Playgroud)
希望有帮助!
| 归档时间: |
|
| 查看次数: |
1835 次 |
| 最近记录: |