表格里面还有个排序的功能,我们需要再修改一下 .. 先找到这个可以排序的栏目 .. 它上面添加了 onSort ,表示这个栏目是可以排序的 ..
这个方法接收两个参数,一个是 int 类型的 index,表示栏目的索引号,这个名字可以换成 columnIndex ,这样更容易明白它表示的东西 ..
在 setState 里面,把 _sortColumnIndex 的值设置成 columnIndex ..
现在我们直接用了列表上的排序方法 .. 先把它删除掉 ... 因为分页显示的数据表,数据的来源是 DataSource,所以我们这里可以用一下 _postsDataSource 上面的 _sort 方法,一会儿再去定义一下这个方法 ...
这个 _sort 有两个参数,第一个参数是个方法 .. 它接收一个 post 参数,方法返回的是 post.title.length,意思就是用文章里的标题的长度作为排序的依据 .. 第二个参数是 ascending,是否使用升序排列 ..
下面再到 PostDataSoruce 里面,去添加一个方法 .. 名字是 _sort .. 第一个参数是个方法参数,名字可以叫它 getField .. 这个方法参数接受一个 post 参数 .. 这样在这个 _sort 里面,使用这个 getField 参数的时候,我们需要给它提供一个 post ,就是内容列表里面的一个项目 ..
第二个参数是 bool 类型的 ascending .. 里面用一下 _posts 上的 sort 方法,一个方法 ,两个参数,a 还有 b ,表示的就是列表里面有两个项目 .. 先判断一下,如果 !ascending .. 我们可以让 a 还有 b 的值调换一下 .. 先让 c 等于 a .. a 等于 b ,再让 b 等于 c ..
下面再添加一个 aValue .. 它的值用一下 getField ,把 a 交给它 ... 对于数据表里面的 Title 这栏的排序来说,这个 aValue 应该就是 a 这个文章内容的 title 的长度,也就是它的标题字符长度 .. 因为在使用 _sort 这个方法的时候,给它的 getField 方法参数设置的就是让它返回 post 里的 title 的 length 属性的值 ..
下面再添加一个 bValue ,用一下 getField,把 b 交给它 .
方法 return 的是,用一下 Comparable 上面的 compare 方法,比较一下 aValue .. 还有 bValue ..
排序完成以后,需要再执行一下 notifyListeners() ...
下面可以到模拟器上去试一下 .. 按一下 Title 栏目的标签 .. 会执行排序 .. 排序的标准就是按照 Title 的字符的长度 ...