Flutter学习四之实现一个支持刷新加载的列表
上一篇文章用Scaffold
widget搭建了一个带底部导航栏的的项目架构,这篇文章就来介绍一下在flutter中怎么实现一个带下拉刷新和上拉加载更多的一个列表,这里用到了pull_to_refresh的第三方库。
1、在pubspec.yaml文件中加入一行代码,导入第三方库。
dependencies:
pull_to_refresh: ^1.6.1
2、新建一个类,继承自StatefulWidget来添加一个新的页面,在build
方法中,返回一个 Scaffold
控件,在appbar
参数中可以定义你想要的标题栏样式,在body
参数中定义你要实现页面的主题内容,这里我要实现一个带刷新和加载功能的列表,所以我们在外层嵌套一个pull_to_refresh库中的SmartRefresher
控件,下面是该控件的构造方法,支持下面这些参数,常用的参数都已经备注。
SmartRefresher(
{Key key,
@required this.controller,//控制内部状态 ,必选参数
this.child, //你的内容部件
this.header, //头部指示器构造,默认值 ClassicHeader
this.footer, //尾部指示器构造 默认值 ClassicHeader
this.enablePullDown: true, //激活下拉刷新,默认开启
this.enablePullUp: false,// 激活上拉加载更多,默认关闭
this.enableTwoLevel: false, //是否允许打开头部指示器二楼的功能,默认不允许
this.onRefresh, //进入下拉刷新时的回调
this.onLoading, //进入上拉加载时的回调
this.onTwoLevel, //当准备打开二楼时的回调
this.onOffsetChange,
this.dragStartBehavior,
this.primary,
this.cacheExtent,
this.semanticChildCount,
this.reverse,
this.physics,
this.scrollDirection,
this.scrollController})
其中有一个必传参数,controller
(@required
修饰的参数表示必传的意思),该参数是RefreshController类型参数,可以通过该对象的一些方法主动触发下拉刷新,上拉加载,开启二楼等主动功能,
// 请求顶部指示器刷新,触发onRefresh
void requestRefresh(
{Duration duration: const Duration(milliseconds: 300),
Curve curve: Curves.linear});
// 请求底部指示器加载数据,触发onLoading
void requestLoading(
{Duration duration: const Duration(milliseconds: 300),
Curve curve: Curves.linear}) ;
// 主动打开二楼
void requestTwoLevel(
{Duration duration: const Duration(milliseconds: 300),
Curve curve: Curves.linear});
// 顶部指示器刷新成功,是否要还原底部没有更多数据状态
void refreshCompleted({bool resetFooterState:false});
// 不显示任何状态,直接变成idle状态隐藏掉
void refreshToIdle();
// 顶部指示器刷新失败
void refreshFailed();
// 关闭二楼
void twoLevelComplete(
{Duration duration: const Duration(milliseconds: 500),
Curve curve: Curves.linear};
// 底部指示器加载完成
void loadComplete();
// 底部指示器进入一个没有更多数据的状态
void loadNoData();
// 底部加载失败
void loadFailed()
// 刷新底部指示器状态为idle
void resetNoData();
更多功能可以参考pull_to_refresh主页,这是目前dart中功能最全的刷新加载更多组件拉。
3、在StatefulWidget
中嵌套一个列表组件,在flutter中官方给我们提供了一个可以用来加载列表数据的一个组件ListView
,和Android中的ListView
控件名称一样,很容易理解。
但是一般情况下我们会用ListView.builder
的来构建一个列表组件,因为直接使用ListView构建的时候,不管有多少条数据都会一次性加载出来,但是ListView.builder
构建的话,有一个延时加载策略,值加载当前屏幕显示的数据,相对而言其性能会更好写。所以当数据比较多的时候,推荐用ListView.builder
构建来构建列表组件。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("文章列表")),
body: SmartRefresher(
controller: _refreshController,
enablePullUp: true,
onRefresh: onRefresh, //自定义的刷新方法
onLoading: loadMore, //自定义加载更多方法
header: WaterDropHeader(),
footer: ClassicFooter(),
child: ListView.builder(
itemBuilder: (context, index) => ItemPage(_articles[index]),
itemCount: _articles.length)));
}
这里要注意一个问题,之前我一位ListView如果想要填充满整个屏幕的话是需要设置高度充满的,所以我就自作聪明的在ListView的外面嵌套来一个Expanded
来填充布局铺满屏幕,结果弄来半天,都不能手动下拉刷新和加载更多,最后,分析发现是填充的问题,结果去掉之后就ok了,并且ListView和Android 中一样都是可以根据item的个数自动适应是否铺满全屏,所以外面不需要再嵌套其他的约束组件来。
Flutter学习四之实现一个支持刷新加载的列表的更多相关文章
- js中对arry数组的各种操作小结 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据 web前端url传递值 js加密解密 HTML中让表单input等文本框为只读不可编辑的方法 js监听用户的键盘敲击事件,兼容各大主流浏览器 HTML特殊字符
js中对arry数组的各种操作小结 最近工作比较轻松,于是就花时间从头到尾的对js进行了详细的学习和复习,在看书的过程中,发现自己平时在做项目的过程中有很多地方想得不过全面,写的不够合理,所以说啊 ...
- 瀑布流AJAX无刷新加载数据列表--当页面滚动到Id时再继续加载数据
瀑布流加载显示数据,在当下已经用的很普遍,尤其是我们在做网上商城时,在产品列表页面已经被普遍使用. 对于实现瀑布流布局的解决方案主要有以下两种方式: 1.对每一条显示数据使用绝对定位+浮动的方式,这样 ...
- Flutter学习六之实现一个带筛选的列表页面
上期实现了一个网络轮播图的效果,自定义了一个轮播图组件,继承自StatefulWidget,我们知道Flutter中并没有像Android中activity的概念.页面见的跳转是通过路由从一个全屏组件 ...
- 【SpringBoot 基础系列】实现一个自定义配置加载器(应用篇)
[SpringBoot 基础系列]实现一个自定义配置加载器(应用篇) Spring 中提供了@Value注解,用来绑定配置,可以实现从配置文件中,读取对应的配置并赋值给成员变量:某些时候,我们的配置可 ...
- Android UI--自定义ListView(实现下拉刷新+加载更多)
Android UI--自定义ListView(实现下拉刷新+加载更多) 关于实现ListView下拉刷新和加载更多的实现,我想网上一搜就一堆.不过我就没发现比较实用的,要不就是实现起来太复杂,要不就 ...
- android 在自定义的listview(有刷新加载项)列表中,数据过少时不能铺满整个屏幕时,header和footer同时显示问题
android 在自定义的listview(有刷新加载项)列表中,数据过少时,当刷新时,加载项也会显示,这是很头疼的一个问题,查阅了一些资料,总结了一个比较不错的方法: 原来代码: @Overrid ...
- [jQuery插件]手写一个图片懒加载实现
教你做图片懒加载插件 那一年 那一年,我还年轻 刚接手一个ASP.NET MVC 的 web 项目, (C#/jQuery/Bootstrap) 并没有做 web 的经验,没有预留学习时间, (作为项 ...
- [学习总结]9、Android-Universal-Image-Loader 图片异步加载类库的使用(超详细配置)
这个图片异步加载并缓存的类已经被很多开发者所使用,是最常用的几个开源库之一,主流的应用,随便反编译几个火的项目,都可以见到它的身影. 可是有的人并不知道如何去使用这库如何进行配置,网上查到的信息对于刚 ...
- 分页插件思想:pc加载更多功能和移动端下拉刷新加载数据
感觉一个人玩lol也没意思了,玩会手机,看到这个下拉刷新功能就写了这个demo! 这个demo写的比较随意,咱不能当做插件使用,基本思想是没问题的,要用就自己封装吧! 直接上代码分析下吧! 布局: & ...
随机推荐
- 使用pip安装模块,出现Cannot unpack file xxx的问题的解决
在windows下使用pip 豆瓣源安装gevent时出现错误 解决办法: pip install -i https://pypi.douban.com/simple/ --trusted-host ...
- Jmeter 常用函数(16)- 详解 __split
如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 根据分隔符分割传递给它的字符串 语法格式 ...
- git 常规操作 windows版
首先在本地建立好文件夹,然后初始化git仓库: git init 接下来在github上面克隆项目: git clone 这里写你的项目地址 然后就可以修改,删除,提交代码了 如果需要在新分支上面开 ...
- golang map 声明,赋值
参考链接:https://blog.csdn.net/wide288/article/details/84303511 // 先声明map var m1 map[string]string// 再使用 ...
- 浅谈Docker(二)
Docker使用cgroup实现CPU,内存和磁盘IO等系统资源的限制. CPU Docker现在有2个与CPU资源相关的参数,-c可以指定CPU的占比,--cpuset可以绑定CPU.例如,指定容器 ...
- 一篇文章快速搞懂Qt文件读写操作
导读:Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便.QFileInfo可以用来获取文件的信息.QDir可以用于对文件夹进行操作. ...
- TCP为什么需要握手
一.TCP握手流程 二.为什么不是4次握手 TCP的每次请求都是成对的,原则上应该是四次 [Client to Server]第一次SYN,seq=x [Server to Client]第二次ACK ...
- C/C++经典面试题1,const关键字用法总结
本文主要说明了const关键字的作用,包括了用于对数组,指针与类相关的修饰方法,作为笔记总结使用.若有错误与不足,欢迎指正. const关键字 用于修饰一个常类型,常类型的变量或对象的值无法被改变,即 ...
- 使用JS制作小游戏贪吃蛇
先看效果图: 过程如下: 1.首先创建一张画布地图<div class="map"> </div>: 2.创建食物的自调用函数 (function (){ ...
- Flutter —布局系统概述
老孟导读:此篇文章非常详细的讲解了 Flutter 布局系统的工作原理. 翻译自:https://itnext.io/flutter-layout-system-overview-c70bbe9ba9 ...