在Flutter DataTable中对列值进行排序

时间:2020-05-02 16:49:25

标签: sorting flutter dart datatable

我很难对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(),
  ),
));

我还要做什么?理想情况下,我希望在用户按下的任何列上都具有排序功能,但就目前而言,我很高兴只有1个列可以进行排序。

如您所见,我添加了约束:

    sortColumnIndex: 0,
    sortAscending: true,

但是我得到的只是第一列附近的箭头(ColumnIndex = 0)-当您按下它时,它实际上什么也没做。

我在做什么错?

1 个答案:

答案 0 :(得分:0)

您必须在要排序的列中添加“ onSort:”,然后调用排序功能。

bool sort;

DataTable(
        sortAscending: sort,
        sortColumnIndex: 0,
        columns: [
          DataColumn(
              label: Text("Col1"),
              onSort: (columnIndex, ascending) {
                setState(() {
                  sort = !sort;
                });
                onSortColum(columnIndex, ascending);
              }),
...

和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']));
      }
    }
  }

希望有帮助!

相关问题