用户登录

表格里面还有个排序的功能,我们需要再修改一下 .. 先找到这个可以排序的栏目 .. 它上面添加了 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 的字符的长度 ...

PaginatedDataTable:排序《 Flutter 移动应用:MDC 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点