我们在上一章回中介绍了
DataTable
Widget相关的内容,本章回中将介绍
DataTable的排序功能 .闲话休提,让我们一起Talk Flutter吧。
概念介绍
我们在本文中将要介绍的DataTable排序功能是指对表中的某一列数据进行排序。我们可以指定给数据表中的哪一列数据排序,也可以指定排序的算法。
在实际项目中数据排序功能是常用的操作,DataTable
提供了相关的属性来实现这种功能,本章回中将详细介绍它的使用方法。
使用方法
整体思路
我们首先介绍排序功能的整体实现思路,接着介绍详细的实现方法,下面是实现排序功能的整体思路:
- 1.指定排序的列,就是说依据哪列中的数据来排序;
- 2.在指定的列中实现排序功能。包含现个方面的内容:
- 一方面是动态调整排序方式;
- 另一方面是实现核心排序功能;
具体细节
- 指定排序的列通过
DataTable
的sortColumnIndex
属性实现,给该属性赋值后会在列名右侧显示一个向上的箭头图标,表示按照升序进行排序。该属性的值就是数据表中列的索引值,第一列的索引值为0,第二列的索引值为1,依此类推。 - 动态调整排序方式通过
DataTable
组件的sortAscending
属性和DataColumn
组件的onSort
属性一起实现,sortAscending属性默认值为true,表示按照升序排序,给他赋值为false时变成降序排序,如何动态调整它的值?这就需要使用onSort
属性,该属性是方法类型,方法包含两个参数,一个是当前列的索引值,一个是排序的值,点击列上的排序图标时会回调此方法,如果当前列的排序方式是升序,点击时该参数值为false,反之为true.我们可以给sortAscending
属性赋值一个变量,然后在onSort
属性对应的方法中通过setState
()方法修改变量的值,这样就可以实现动态调整排序方式的功能。 - 实现核心排序功能的代码也在
onSort
属性对应的方法中,我们在示例代码中使用字符串的排序方法compare
()来实现核心排序功能,它会把列中的字符串依据字典顺序进行排序,稍后我们会在示例代码中演示。大家不必拘泥于此方法,可以依据项目的需求实现自己的排序算法。
示例代码
DataColumn( label: Text("Name"),
//点击排序图标时调用
onSort: (int index,bool ascend){
setState(() {
_sortIndex = index;
//可以动态调整排序的方式(升序还是降序)
_isSortAscending = ascend;
//实现真正的排序功能,这里使用了list的sort方法,排序思路:如果当前列没有按照
//指定的顺序排列,那么交换一下两个参数的位置,然后使用字符串的排序方法对这两个
//参数进行比较,并且返回比较后的结果,实际项目中可以使用自定义排序的算法替换
//字符串的排序方法:compareTo
dataList.sort((v1,v2){
var temp;
if(!_isSortAscending) {
temp = v1;
v1 = v2;
v2 = temp;
}
return v1.name.compareTo(v2.name);
});
});
},),
上面的代码中只列出onSort
属性对应的方法,关于DataTable
组件和sortColumnIndex
属性相关的代码可以参考上一章回的内容。此外,我们在代码中对排序算法进行了注释说明,这样方便大家理解算法的内容。
编译并且运行完整的程序,就会出现一个三行三列的数据表,点击表中的排序箭头时就会看到表中的数据在变化,变化后的结果就是排序后的结果,大家可以查看结果是否符合排序的预期。
看官们,关于DataTable排序功能相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!