首页 > 其他分享 >dart+flutter中使用PaginatedDataTable分页时最后一页多出空白行问题

dart+flutter中使用PaginatedDataTable分页时最后一页多出空白行问题

时间:2023-03-02 13:58:17浏览次数:51  
标签:行数 value dart controller 空白行 一页 PaginatedDataTable rowsPerPage availableRows

使用PaginatedDataTable时解决最后一页不够当前行的话会有很空白行的问题

解决的场景:

比如下图,28行数据,每页5行最后一页会多出两行空白。

 

 

解决方法:

可以使用PaginatedDataTable中的onPageChanged 来进行操作

onPageChanged (发生翻页时回调)

onPageChanged: (value) {
  int rowCount = controller.dataSource.value.rowCount;
  // Q:下面这些代码都是为了解决最后一页不够当前行的话会有很空白行的问题
  // 先判断当前展示行是否大于剩余行数
  if(rowCount - value < controller.rowsPerPage.value){
    var perPage = rowCount - value;
    // 如果当前展示行数大于剩余行数,就修改当前展示行为剩余的行数
    // 但是有个操蛋的问题,修改的行数必须在availableRowsPerPage这个里面有数字,所以要新增
    if(!controller.availableRows.contains(perPage)){
      // 新增剩余行
      controller.availableRows.add(perPage); 
      controller.rowsPerPage.value = perPage;
    }
  }else{
    var defaultPage = controller.rowsPerPageLast.value;
    // 如果rowsPerPage和rowsPerPageLast不相等就表示rowsPerPage在上面被修改过
    if(controller.rowsPerPage.value != defaultPage){
      // 这儿的操作和上面描述相反,出了最后一页就把新增的最后一页行数页删了
      controller.availableRows.removeLast();
      // 因为上面最后一页切换了展示行数,所以要跳出最后一页时要恢复之前的行数
      controller.rowsPerPage.value = defaultPage;
    }
  }
},

具体的逻辑在上面写了注释,我再说下部分参数的意义

controller.dataSource => DataTableSource的封装类,我在controller中把它设置成了可监测的类

controller.rowsPerPage => 当前页显示的行数

controller.rowsPerPageLast => 切换显示行数后保留的上一个行数

controller.availableRows => 能切换展示行的列表   总结: 代码段中是flutter+getx的写法,如果你不使用getx,请灵活改变参数调用的方式,在StatefulWidget同样可以完成。 在onRowsPerPageChanged还可以优化一下代码,不然在最后一页改变展示行的话availableRows中新增进去的选项不会被去除

标签:行数,value,dart,controller,空白行,一页,PaginatedDataTable,rowsPerPage,availableRows
From: https://www.cnblogs.com/glwuzhang/p/17171525.html

相关文章

  • dart-sass与node-sass的区别以及使用dart-sass可能会出现的问题
    前言2020年10月27日,Sass官方团队正式宣布Libsass将弃用,以及基于它的NodeSass和SassC,并且建议用户使用DartSass。如果在vue脚手架搭建的项目中需要使用sass,建议初始......
  • Dart基础语法2
    List、SetList:有序、可重复Set:无序、不重复 互相转化Listlist=[1,2,1];Setset=list.toSet();ListsList=set.toList();遍历forEachListlist=[1,2,......
  • Dart 基础语法1
    Dart环境搭建1.安装DartSDK2.VSCode安装Dart3.VSCode安装CodeRunner 入口方法//可传参,可有返回值voidmain(List<String>args){print("Hell......
  • dart扩展(extension)
    `libraryutils;//扩展list的方法extensionExListonList{//扩展操作符Listoperator()=>reversed.toList();//一个链表分割成两个List<List>split(intat)=>......
  • Using / for division outside of calc() is deprecated and will be removed in Dart
    Scss/Sass项目里使用/报错:Using/fordivisionoutsideofcalc()isdeprecatedandwillberemovedinDartSass2.0.0.。指的是不能直接使用/来进行相除,已经在......
  • Flutter Dart
    一、第三类库使用:pub包管理系统二、async和await三、内置库网络请求四、Dart库的重命名Dart冲突解决五、库部分导入六、延迟加载   一、第三类库使用:pub包管理......
  • Dart 运行测试失败 Failed to load xxx: Does not exist
    背景今天写dart,运行测试的时候突然报了个错解决它花了最少半个小时,真坑爹啊!解决方法找到你项目里的pubspec.lock,把test的版本改为1.22.1然后运行dartpubget就可以了......
  • 1.4 Dart语言简介
    1.4Dart语言简介在之前我们已经介绍过Dart语言的相关特性,读者可以翻看一下,如果读者已经熟悉Dart语法,可以跳过本节,如果你还不了解Dart,也不用担心,按照笔者经验,如果你......
  • Dart Windows安装包
    Baidu云盘链接:【链接:https://pan.baidu.com/s/1ZWeORNNTuNjdO-VX0fGFfw?pwd=nen8提取码:nen8】官方来源,无毒无害,放心下载......
  • dart的基本使用
    1.windows上环境搭建(1) 在dart官网上下载对应的sdk安装即可。(2) 使用vscode开发,安装dart插件和CodeRunner插件即可。 2.Dart的入口方法、打印、注释、常量、及......