Flutter DataTable 中的列值排序

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)——当你按下它时,它实际上什么也没做。

我究竟做错了什么?

Eli*_*lin 6

您必须在要排序的列中添加一个 '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)

希望有帮助!