Flutter 数据表图标排序

问题描述 投票:0回答:1

我想根据图标对数据表进行排序。 我收到错误消息:

类“Icon”没有实例方法“compareTo”。 接收者:“图标”的实例 尝试调用:compareTo('图标'的实例)

我复制了运行良好的字符串排序方法,并将其添加到图标中。 我想根据图标对数据表中的所有条目进行排序,以便由图标本身重新排序,例如雪花>人,而且我想根据特定图标的颜色重新排序,例如:snowflake.green>snowflake .蓝色

我的地图列表>我从中获取数据的位置如下所示:

List<Map<String, dynamic>> _books = [
{
  "test": Icon(Icons.ac_unit),
  "book": "Jimmy",
  "author": "Goethe",
  "id": "1",
  "testi": Switch(
    inactiveThumbColor: Colors.white,
    activeColor: Colors.white,
    activeTrackColor: Colors.green,
    inactiveTrackColor: Colors.grey,
    value: true,
    onChanged: (value) {},
  ),
},
.....

我的排序功能如下所示:

List<DataColumn> _createColumns() {
return [
  DataColumn(
    label: Text('Test'),
    onSort: (columnIndex, _) {
      setState(() {
        _currentSortColumn = columnIndex;
        if (_isSortAsc) {
          _books.sort((a, b) => b['test'].compareTo(a['test']));
        } else {
          _books.sort((a, b) => a['test'].compareTo(b['test']));
        }
        _isSortAsc = !_isSortAsc;
      });
    },
  ),
  DataColumn(
  .....

有办法做到这一点吗? 这也不起作用:

DataColumn(
    label: Text('Test'),
    onSort: (columnIndex, _) {
      setState(() {
        _currentSortColumn = columnIndex;
        if (_isSortAsc) {
          test.books.sort((a, b) =>
              b['test.'.toString()].compareTo(a['test'.toString()]));
        } else {
          test.books.sort((a, b) =>
              a['test'.toString()].compareTo(b['test'.toString()]));
        }
        _isSortAsc = !_isSortAsc;
      });
    },
  ),
flutter sorting datatable
1个回答
0
投票

答案很简单,只需对应该相互比较的元素使用 toString() 方法,如下所示:

DataColumn(
    label: Text('Test'),
    onSort: (columnIndex, _) {
      setState(() {
        _currentSortColumn = columnIndex;
        if (_isSortAsc) {
          test.books.sort((a, b) =>
              b['test'].toString().compareTo(a['test'].toString()));
        } else {
          test.books.sort((a, b) =>
              a['test'].toString().compareTo(b['test'].toString()));
        }
        _isSortAsc = !_isSortAsc;
      });
    },
  ),

玩得开心!

© www.soinside.com 2019 - 2024. All rights reserved.