ListView 下拉刷新与上拉加载更多


import 'dart:async';
import 'package:flutter/material.dart';/*** 有状态StatefulWidget*  继承于 StatefulWidget,通过 State 的 build 方法去构建控件*/
class DemoRefreshListView extends StatefulWidget {通过构造方法传值DemoRefreshListView();//主要是负责创建state@override_DemoStateWidgetState createState() => _DemoStateWidgetState();
}/*** 在 State 中,可以动态改变数据* 在 setState 之后,改变的数据会触发 Widget 重新构建刷新*/
class _DemoStateWidgetState extends State<DemoRefreshListView>with SingleTickerProviderStateMixin {_DemoStateWidgetState();//ListView 数据源List list = new List();//ScrollController可以监听滑动事件,判断当前view所处的位置ScrollController _scrollController = ScrollController();//分页 加载的页数int _page = 1;//是否正在加载数据bool isLoading = false;@overridevoid initState() {///初始化,这个函数在生命周期中只调用一次super.initState();//初始化模拟数据list = List.generate(15, (i) => '哈喽,我是原始数据 $i');//设置监听_scrollController.addListener(() {if (_scrollController.position.pixels ==_scrollController.position.maxScrollExtent) {print('滑动到了最底部');_getMore();}});}@overridevoid didChangeDependencies() {///在initState之后调 Called when a dependency of this [State] object changes.super.didChangeDependencies();}@overrideWidget build(BuildContext context) {return  new Scaffold(appBar: new AppBar(// Here we take the value from the MyHomePage object that was created by// the App.build method, and use it to set our appbar title.title: new Text("list"),),body: RefreshIndicator(//下拉刷新触发方法onRefresh: _onRefresh,//设置listViewchild: ListView.builder(//条目显示布局itemBuilder: _renderRow,//listView 的控制器controller: _scrollController,//条目个数据  这里+1 是最后一条目显示 加载更多提示itemCount: list.length+1,),),);}Widget _renderRow(BuildContext context, int index) {if (index < list.length) {return ListTile(title: Text(list[index]),);}return _getMoreWidget();}/*** 下拉刷新方法,为list重新赋值*/Future<Null> _onRefresh() async {await Future.delayed(Duration(seconds: 1), () {print('refresh');setState(() {list = List.generate(20, (i) => '哈喽,我是新刷新的 $i');});});}/*** 上拉加载更多*/Future _getMore() async {if (!isLoading) {setState(() {isLoading = true;});await Future.delayed(Duration(seconds: 1), () {print('加载更多');setState(() {list.addAll(List.generate(5, (i) => '第$_page次上拉来的数据'));_page++;isLoading = false;});});}}/*** 加载更多时显示的组件,给用户提示*/Widget _getMoreWidget() {return Center(child: Padding(padding: EdgeInsets.all(10.0),child: Row(mainAxisAlignment: MainAxisAlignment.center,crossAxisAlignment: CrossAxisAlignment.center,children: <Widget>[Text('加载中...     ',style: TextStyle(fontSize: 16.0),),CircularProgressIndicator(strokeWidth: 1.0,)],),),);}@overridevoid dispose() {// TODO: implement disposesuper.dispose();_scrollController.dispose();}
}

本公众号会首发系列专题文章,付费的视频课程会在公众号中免费刊登,在你上下班的路上或者是睡觉前的一刻,本公众号都是你浏览知识干货的一个小选择,收藏不如行动,在那一刻,公众号会提示你该学习了。


【##】 目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒点击查看提示


Flutter ListView 下拉刷新与上拉加载更多相关推荐

  1. jquery手机端页面下拉刷新,上划加载更多

    手机页面下拉刷新,上划加载更多,IOS不能下拉的问题解决 -转圈的是需要引用样式,代码删除了 上划加载时的样子 <script type="text/javascript"& ...

  2. 微信小程序04---头像上传、瀑布流、下拉刷新、触底加载更多、分包

    目录 一.头像上传 1.选择图片   wx.chooseImage() 2.上传文件   wx.uploadFile() 二.瀑布流+下拉刷新+触底加载 三.分包加载 什么是分包 为什么要使用分包 如 ...

  3. 【Android开源控件】SmartRefreshLayout实现下拉刷新,上划加载

  4. Flutter 21: 图解 ListView 下拉刷新与上拉加载 (三)【RefreshIndicator】

    小菜前段时间整理了两种 ListView 的异步加载数据时,下拉刷新与上滑加载更多的方式,每种方式都有自己的优势,网上也有很多大神讲解过 ListView 数据流的种种处理方式,小菜根据实际遇到的情况 ...

  5. Flutter ListView封装,下拉刷新、上拉加载更多

    Flutter ListView封装,下拉刷新.上拉加载更多 ​ 封装了Flutter的ListView,只要传递请求数据的方法和绘制item的方法进去就可以绘制ListView,同时支持下拉刷新.上 ...

  6. Android ListView下拉刷新、上拉载入更多

    找下拉刷新,上拉加载的demo找了好久,踩找到这个相对完美的.所以分享给大家 https://github.com/Maxwin-z/XListView-Android 0. XListView继承L ...

  7. ListView下拉刷新、上拉载入更多之封装改进

    在Android中ListView下拉刷新.上拉载入更多示例一文中,Maxwin兄给出的控件比较强大,前面有详细介绍,但是有个不足就是,里面使用了一些资源文件,包括图片,String,layout,这 ...

  8. 下拉刷新及上拉加载更多的ListView

    PullToRefreshListView 自定义ListView 带简洁的下拉刷新及上拉加载更多功能 PullToRefreshListView 实现过程 使用方法 GIF效果 结束语 实现过程 继 ...

  9. 安卓下拉刷新、上拉加载数据显示

    整个是一个scrollView,嵌套一个线性布局,下拉刷新.或者上拉加载后,通过addView()方法,加载消息体,每一个消息体是一个复杂的子view. 做一个类似qq客户端"好友动态&qu ...

最新文章

  1. Catalyst3550交换机配置三层接口
  2. webstorm 不识别.config文件_webstorm好用的十款插件
  3. Git的sourcetree找不到git
  4. HDU2571:命运(简单dp)
  5. C0302 将一个代码块中的内容保存在文件中, 查看一个rpm包是否可以安装
  6. 关于IE6.7.8.FF兼容的问题
  7. [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]
  8. LeetCode 186. 翻转字符串里的单词 II
  9. 批量删除table或view
  10. leetcode链表篇
  11. UI设计中,文本底部添加下换线
  12. Linux中修改PATH环境变量(只在当前窗口下生效)
  13. 2019ccpc河北省赛总结
  14. 如何设置计算机桌面待办事项,Windows电脑桌面云便签怎么设置每天提醒待办事项?...
  15. 开放平台设计方案与实践
  16. 计算机文化基础0008 17秋在线作业1,川大《计算机文化基础0008》17秋在线作业1(100分)...
  17. SpringBoot单元测试断言 assertions
  18. HTML5自造字,电脑中的造字程序怎么用啊怎么造字
  19. 前端JS请求网络图片报错GET https://xxx.png 404 (Not Found)的解决办法
  20. 关于DOTA2排名前5战队惯用英雄分析

热门文章

  1. PRNet:人脸3D重建与密集对齐
  2. 月薪3K与月薪3万的程序员,距离是怎么拉开的?
  3. 一篇文章带你了解Python运算符重载
  4. 深度学习(四十三)条件变分自编码器概述
  5. angular中如何定义全局变量_如何在Angular 2 / Typescript中声明全局变量?
  6. 新版手机浏览器_夸克浏览器发布全新3.0版,AI技术创新智能化信息服务
  7. oracle用hints调优,oracle hints的那点事
  8. java求圆弧切线_两个圆的公切线
  9. c语言内置画直线函数库,C语言不调用库函数画直线
  10. jpush java_JPush Java SDK 示例代码与简要注释