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写的比较随意,咱不能当做插件使用,基本思想是没问题的,要用就自己封装吧! 直接上代码分析下吧! 布局: & ...
随机推荐
- JavaScript学习系列博客_2_JavaScript编写位置
JavaScript代码一般编写在哪里呢? 看到这个问题,第一个反应就是,JavaScript那当然是编写在<Script></Script>这对标签中啊!然而! 1.可以编写 ...
- Robot Framework(2)——简单运行案例
1.打开RIDE 之前介绍的3种方式都可以 2.创建工程和测试套件 1>点击File-New Project ①Name:工程命名 ②Parent Directory:上级目录,工程会创建在这个 ...
- count.exe 个人项目
Github项目地址:https://github.com/bravedreamer/wordCount/tree/master/wc 一.题目描述: Word Count1. 实现一个简单而完整的软 ...
- Clayff力场(转载)
本文转载自:http://blog.sina.com.cn/s/blog_b48a7ac30102w4km.html 注意:lammps中并没有完整的clayff势函数,需要将一下三者结合使用. an ...
- 力扣Leetcode 33. 搜索旋转排序数组
33. 搜索旋转排序数组 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值, ...
- 一个简单的Android音乐播放器
Android小白的期末作业 Android期末项目,仅用作学习使用,在线音乐部分只获取了网易云热歌榜,API来自鼻子亲了脸 传送门: GitHub 参考: anddiencn 实现功能 展示出本地的 ...
- 2020重新出发,MySql基础,MySql数据库备份与恢复
@ 目录 MySQL数据库备份与恢复 数据库为什么需要备份 MySQL备份类型 MySQL热备份及恢复 逻辑备份 mysqldump SELECT INTO-OUTFILE mydumper 裸文件备 ...
- 轻轻松松学CSS:float
float属性,会使元素向左或向右移动,其周围的元素也会重新排列.float不仅自己飘忽不定,还对周围元素有影响,这种影响力不容小觑.他捉摸不定(浮动规律不好把握),他干涉他国内政(对周围元素有影响) ...
- 虚拟机安装:VirtualBox上安装Ubuntu
在Win10 中使用VirtualBox安装Ubuntu 本教程将指引读者在Windows10操作系统下使用开源虚拟机软件VirtualBox安装Ubuntu,读者也可以使用其他虚拟机VMware W ...
- android尺寸问题(转)
android尺寸问题(转) (2013-01-15 16:55:36) 转载▼ 标签: 杂谈 分类: LINUX 最近公司做的项目中涉及到屏幕自适应的问题.由于做的是电视版的项目,因此屏幕自适应问题 ...