Flutter 项目实战 下拉刷新、上拉加载 九

Flutter 项目实战 下拉刷新、上拉加载 九下拉刷新和上拉加载更多可以更好的分页加载数据

/ 不同列表样式 /

Flutter 项目实战 下拉刷新、上拉加载 九
普通列表下拉刷新与上拉加载

Flutter 项目实战 下拉刷新、上拉加载 九
GridView 列表下拉刷新和上拉加载

​​​​

        / 自定义下拉刷新、上拉加载样式 /

作为一名Flutter开发者 , 在选择依赖库的时候 需要注意的几个点 :

. 依赖库的评分 pull_to_refresh

 Flutter 项目实战 下拉刷新、上拉加载 九 

. 依赖库最后更新的时间 

 Flutter 项目实战 下拉刷新、上拉加载 九

 . 依赖库问题的反馈情况

 Flutter 项目实战 下拉刷新、上拉加载 九

 . 依赖库的来源

  pull_to_refresh

Flutter 项目实战 下拉刷新、上拉加载 九

自定义下拉刷新头部样式

ClassicHeader classicHeader() { return ClassicHeader( releaseText: '松开手刷新', refreshingText: '刷新中', completeText: '刷新完成', failedText: '刷新失败', idleText: '下拉刷新', completeIcon: const Icon(Icons.done, color: Colors.red), idleIcon: const Icon(Icons.arrow_downward, color: Colors.red), releaseIcon: const Icon(Icons.refresh, color: Colors.red), failedIcon: const Icon(Icons.error, color: Colors.red), refreshingIcon: cirProInt(), ); }

旋转动画

Container cirProInt() { return Container( child: CircularProgressIndicator( valueColor: AlwaysStoppedAnimation(Colors.red), strokeWidth: 4.0, backgroundColor: Colors.blue, ), width: 20.0, height: 20.0, ); }

 自定义上拉加载更多底部样式

  . 简单定义

ClassicFooter classicFooter() { return ClassicFooter( height: 100.0, loadingText: '加载中...', noDataText: '暂无数据', failedText: '加载失败', idleText: '上拉加载', ); }

Flutter 项目实战 下拉刷新、上拉加载 九

. 自定义上拉加载

  根据不同的加载状态显示不同的提示 ; 设置底部自定义视图点击可以加载更多数据 .

Flutter 项目实战 下拉刷新、上拉加载 九

Flutter 项目实战 下拉刷新、上拉加载 九

CustomFooter? customerFooter(State state, RefreshController controller, {ILoadDataCallBack? callBack}) { return CustomFooter( height: 40.0, builder: (BuildContext context, LoadStatus? mode) { ///上拉加载提示 String loadTips = ''; ///是否加载中 bool isLoading = false; ///是否可点击加载更多 bool isCanClick = false; if (mode == LoadStatus.idle) { loadTips = '上拉加载更多数据'; isLoading = false; isCanClick = false; } else if (mode == LoadStatus.loading) { isLoading = true; isCanClick = false; loadTips = '数据加载中...'; } else if (mode == LoadStatus.failed) { loadTips = '加载失败,上拉加载更多数据'; isCanClick = false; isLoading = false; } else if (mode == LoadStatus.canLoading) { loadTips = '点击加载更多数据'; isLoading = false; isCanClick = true; } else { isLoading = false; loadTips = '暂无数据,点击可重新加载数据'; isCanClick = true; } return GestureDetector( onTap: () { if (isCanClick) { controller.footerMode!.value = LoadStatus.canLoading; isLoading = true; print('上拉加载更多 $isCanClick'); } }, child: Container( height: 40.0, color: Colors.transparent, child: Center( child: isLoading ? Row( mainAxisAlignment: MainAxisAlignment.center, children: [ cirProInt(), Text( '\t\t$loadTips', style: TextStyle( color: Color(0xFFBDBDBD), fontSize: 14.0), ), ], ) : Text( '$loadTips', style: TextStyle(color: Color(0xFFBDBDBD), fontSize: 14.0), ), ), )); }, loadStyle: LoadStyle.ShowAlways, ); } ///加载更多数据 typedef void ILoadDataCallBack();

 . 使用自定义加载更多 customerFooter

Flutter 项目实战 下拉刷新、上拉加载 九  

Flutter 项目实战 下拉刷新、上拉加载 九

 /  列表滚动是否可优化 /

通过开发者工具 AS 查看 Frame rendering times (大概意思就是每秒视图渲染多少帧)

. 理想状态下每秒渲染的帧数是接近1秒钟60帧 ,下面的状态是比1秒钟60帧低了很多 . 列表滚动的过程中需要渲染的列表的每个视图 视图里面包含了一张图片 . 可以尝试不加载图片 , 观察一下每一秒绘制多少帧 .

Flutter 项目实战 下拉刷新、上拉加载 九
列表每一项

Flutter 项目实战 下拉刷新、上拉加载 九

. 取消图片加载 ,观察列表滚动时 每秒钟渲染的帧数 , 有明显的上升趋势 . 所以为了进一步优化, 我们需要在滚动列表时 , 列表停止滚动加载视图 .

Flutter 项目实战 下拉刷新、上拉加载 九
列表每一项

Flutter 项目实战 下拉刷新、上拉加载 九

. 监听列表滚动状态  ( NotificationListener ) 

Flutter 项目实战 下拉刷新、上拉加载 九
列表滚动状态

bool notificationFunction(Notification notification) { ///通知类型 switch (notification.runtimeType) { case ScrollStartNotification: print("开始滚动"); ///刷新页面 不加载图片 isLoadingPic = false; break; case ScrollUpdateNotification: print("正在滚动"); break; case ScrollEndNotification: print("滚动停止"); ///刷新页面 加载图片 setState(() { isLoadingPic = true; }); break; case OverscrollNotification: print("滚动到边界"); break; } return true; } 

. 列表滚动过程中不渲染图片到列表, 滚动完成渲染 并查看每秒绘制多少帧 到情况 .

Flutter 项目实战 下拉刷新、上拉加载 九
通过滚动状态控制图片的加载

 Flutter 项目实战 下拉刷新、上拉加载 九

 Flutter 项目实战 下拉刷新、上拉加载 九

 免费接口 京东云

下拉刷新、上拉加载更多案例

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231428.html原文链接:https://javaforall.net

(0)
上一篇 2025年12月13日 下午6:01
下一篇 2025年12月13日 下午6:22


相关推荐

  • 显示搜索dota2协调服务器,老司机教你处理搜索dota2游戏协调服务器中【操作流程】…[通俗易懂]

    显示搜索dota2协调服务器,老司机教你处理搜索dota2游戏协调服务器中【操作流程】…[通俗易懂]win7系统有很多人都喜欢使用,我们操作的过程中常常会碰到win7系统搜索dota2游戏协调服务器中的问题。如果遇到win7系统搜索dota2游戏协调服务器中的问题该怎么办呢?很多电脑水平薄弱的网友不知道win7系统搜索dota2游戏协调服务器中究竟该怎么解决?其实不难根据下面的操作步骤就可以解决问题1:DOTA2服务器蹦了之后,进入DOTA2,发现最顶端先是提示:“搜索DOTA2协调服务器中…”…

    2022年5月13日
    132
  • centos7.6安装docker_docker自动部署多环境

    centos7.6安装docker_docker自动部署多环境前言前面一篇学了mac安装docker,这篇来学习在linux上安装docker环境准备Docker支持以下的CentOS版本,目前,CentOS仅发行版本中的内核支持Docker。Doc

    2022年7月30日
    9
  • 贪吃蛇(C语言实现)

    贪吃蛇(C语言实现)文章目录游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化蛇颜色设置随机生成食物打印蛇与覆盖蛇移动蛇执行按键判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数游戏说明游戏效果展示游戏代码游戏代码详解游戏框架构建隐藏光标光标跳转初始化界面初始化蛇颜色设置随机生成食物打印蛇与覆盖蛇移动蛇执行按键判断得分与结束游戏主体逻辑函数从文件读取最高分更新最高分到文件主函数…

    2022年5月9日
    42
  • Pytorch实现STN

    Pytorch实现STNfrom__future__importprint_functionimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFimporttorch.optimasoptimimporttorchvisionfromtorchvisionimportdatasets,transformsfromtorch.autogradimportVariableimportmatplotlib…

    2022年10月18日
    5
  • 使用Coze(扣子)+飞书表格,打造自动化EXCEL表格数据整理神器-首席AI分享圈

    使用Coze(扣子)+飞书表格,打造自动化EXCEL表格数据整理神器-首席AI分享圈

    2026年3月12日
    2
  • 安装vmware一直报缺少dll_vmware安装问题

    安装vmware一直报缺少dll_vmware安装问题MicrosoftRuntimeDLL安装程序未能完成安装不要说什么去打开%temp%,治标不治本,如果后面无法输入密钥的话,两个问题堆在一起根本解决不了。MicrosoftRuntimeDLL安装程序未能完成安装:这个问题的最直接解决办法是服务没打开,打开控制面板-管理工具-服务确认以下两个服务是打开的:WindowsInstaller;WindowsModulesInst…

    2025年11月16日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号