我想根据图标对数据表进行排序。 我收到错误消息:
类“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;
});
},
),
答案很简单,只需对应该相互比较的元素使用 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;
});
},
),
玩得开心!