flutter 下拉加载+下拉加载
功能:
1、下拉加载
2、上拉加载
3、显示加载图标
4、更新列表数据,隐藏加载图标
flutter库:
- flutter_spinkit: ^3.1.0 加载图标
其他:加载列表需要列表,基于上一节的flutter 列表展示
细节:
1、列表构造器
a、绑定列表controller // ScrollController scrollController = ScrollController();
b、更新LIST data
2、controller监听是否滑动到底部
- @override
- void initState() {
- super.initState();
- scrollController.addListener(() {
- if (scrollController.position.pixels ==
- scrollController.position.maxScrollExtent) {
- print('滑动到了最底部${scrollController.position.pixels}');
- setState(() {
- showMore = true;
- });
- getMoreData(); // 增加点数据
- }
- });
- getListData(); // 暂时未使用
- }
- @override
- void dispose() {
- super.dispose();
- //手动停止滑动监听
- scrollController.dispose();
- }
3、 RefreshIndicator 刷新组件
- new RefreshIndicator(
- child: isLoading == false // 判断是否正在加载中
- ? new ListView.builder(
- controller: scrollController,
- itemCount: storyData.length, //列表长度+底部加载中提示
- itemBuilder: (BuildContext context, int index) {
- // 传入MessageData返回列表项
- return new StoryItem(storyData[index]);
- },
- )
- : new Stack(
- children: <Widget>[
- new Padding(
- padding:
- new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 35.0),
- child: new Center(
- child: SpinKitFadingCircle(
- color: Colors.blueAccent,
- size: 30.0,
- ),
- ),
- ),
- new Padding(
- padding:
- new EdgeInsets.fromLTRB(0.0, 35.0, 0.0, 0.0),
- child: new Center(
- child: new Text('正在加载中,莫着急哦~'),
- ),
- ),
- ],
- ),
- onRefresh: _onRefresh) // 刷新
4、部分异步函数
- Future<void> _onRefresh() async {
- if (isLoading) {
- return;
- }
- setState(() {
- isLoading = true;
- page = ;
- });
- print('下拉刷新开始,page = $page');
- await Future.delayed(Duration(seconds: ), () {
- setState(() {
- isLoading = false;
- final arr = new StoryData(
- ,
- 'images/story/03/cover.jpg',
- 'episode.26',
- '放课後',
- '终於可以和自己憧憬的同学自然的说早安。正当爽子正在为这件事感动的时候,这学期代理班导的副班导荒井一市(通称:阿瓶)登场了,阿瓶正想要擅自决定谁来制作出席簿时,不想看到大家困扰的爽子就举起了手…。',
- []);
- storyData.add(arr);
- print('下拉刷新结束,page = $page');
- });
- });
- }
- Future<void> getMoreData() async {
print('xx');
if (isLoading) {
return;
}
setState(() {
isLoading = true;
page = 0;
});
print('下拉刷新开始,page = $page');- await Future.delayed(Duration(seconds: 3), () {
setState(() {
isLoading = false;
final arr = new StoryData(
26,
'images/story/03/cover.jpg',
'episode.26',
'放课後',
'终於可以和自己憧憬的同学自然的说早安。正当爽子正在为这件事感动的时候,这学期代理班导的副班导荒井一市(通称:阿瓶)登场了,阿瓶正想要擅自决定谁来制作出席簿时,不想看到大家困扰的爽子就举起了手…。',
[]);
storyData.add(arr);
print('下拉刷新结束,page = $page');
});
});
}
-------------完整code-------------------
story.dart
- import 'package:flutter/material.dart';
- import 'story_data.dart';
- import 'story_item.dart';
- import 'package:flutter_spinkit/flutter_spinkit.dart';
- void main() => runApp(Story());
- class Story extends StatefulWidget {
- @override
- _Story createState() => new _Story();
- }
- class _Story extends State<Story> {
- bool isLoading = false; //是否正在请求新数据
- bool showMore = false; //是否显示底部加载中提示
- bool offState = false; //是否显示进入页面时的圆形进度条
- int page = ; //暂时用不到
- ScrollController scrollController = ScrollController();
- Future<void> getMoreData() async {if (isLoading) {
- return;
- }
- setState(() {
- isLoading = true;
- });
- print('下拉刷新开始,page = $page');
- await Future.delayed(Duration(seconds: ), () {
- setState(() {
- isLoading = false;
- final arr = new StoryData(
- ,
- 'images/story/03/cover.jpg',
- 'episode.26',
- '放课後',
- '终於可以和自己憧憬的同学自然的说早安。正当爽子正在为这件事感动的时候,这学期代理班导的副班导荒井一市(通称:阿瓶)登场了,阿瓶正想要擅自决定谁来制作出席簿时,不想看到大家困扰的爽子就举起了手…。',
- []);
- storyData.add(arr);
- });
- });
- }
- void getListData() {}
- @override
- void initState() {
- super.initState();
- scrollController.addListener(() {
- if (scrollController.position.pixels ==
- scrollController.position.maxScrollExtent) {
- print('滑动到了最底部${scrollController.position.pixels}');
- setState(() {
- showMore = true;
- });
- getMoreData(); // 增加点数据
- }
- });
- getListData(); // 暂时未使用
- }
- @override
- void dispose() {
- super.dispose();
- //手动停止滑动监听
- scrollController.dispose();
- }
- @override
- Widget build(BuildContext context) {
- // TODO: implement build
- return Scaffold(
- body: new RefreshIndicator(
- child: isLoading == false
- ? new ListView.builder(
- controller: scrollController,
- itemCount: storyData.length, //列表长度+底部加载中提示
- itemBuilder: (BuildContext context, int index) {
- // 传入MessageData返回列表项
- return new StoryItem(storyData[index]);
- },
- )
- : new Stack(
- children: <Widget>[
- new Padding(
- padding:
- new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 35.0),
- child: new Center(
- child: SpinKitFadingCircle(
- color: Colors.blueAccent,
- size: 30.0,
- ),
- ),
- ),
- new Padding(
- padding:
- new EdgeInsets.fromLTRB(0.0, 35.0, 0.0, 0.0),
- child: new Center(
- child: new Text('正在加载中,莫着急哦~'),
- ),
- ),
- ],
- ),
- onRefresh: _onRefresh));
- }
- Future<void> _onRefresh() async {
- if (isLoading) {
- return;
- }
- setState(() {
- isLoading = true;
- });
- print('下拉刷新开始,page = $page');
- await Future.delayed(Duration(seconds: ), () {
- setState(() {
- isLoading = false;
- final arr = new StoryData(
- ,
- 'images/story/03/cover.jpg',
- 'episode.26',
- '放课後',
- '终於可以和自己憧憬的同学自然的说早安。正当爽子正在为这件事感动的时候,这学期代理班导的副班导荒井一市(通称:阿瓶)登场了,阿瓶正想要擅自决定谁来制作出席簿时,不想看到大家困扰的爽子就举起了手…。',
- []);
- storyData.add(arr);
- print('下拉刷新结束);
- });
- });
- }
- }
部分截图:
加载完成之后,列表数据会增加相同的数据,这里没有涉及到接口。
源码地址:https://github.com/ft1107949255/kiminitodoke
flutter 下拉加载+下拉加载的更多相关文章
- Flutter上拉加载下拉刷新---flutter_easyrefresh
前言 Flutter默认不支持上拉加载,下拉刷新也仅仅支持Material的一种样式.Android开发使用过SmartRefreshLayout的小伙伴都知道这是一个强大的刷新UI库,集成了很多出色 ...
- mui scroll和上拉加载/下拉刷新
mui中 scroll和上拉加载/下拉刷新同时存在会出现两个滚动条 把/* */ /* //mui页面鼠标拖动代码: mui('.mui-scroll-wrapper').scroll({ dec ...
- react + iscroll5 实现完美 下拉刷新,上拉加载
经过几天的反复折腾,总算做出一个体验还不错的列表页了,主要支持了下拉刷新,上拉加载两个功能. 一开始直接采用了react-iscroll插件,它是基于iscroll插件开发的组件.但是开发过程中,发现 ...
- iOS MJRefresh下拉刷新(上拉加载)使用详解
下拉刷新控件目前比较火的有好几种,本人用过MJRefresh 和 SVPullToRefresh,相对而言,前者比后者可定制化.拓展新都更高一点. 因此本文着重讲一下MJRefresh的简单用法. 导 ...
- SVPullToRefresh 下拉刷新,上拉加载
https://github.com/Sephiroth87/ODRefreshControl 类似刷新控件,类似qq动画的那种刷新. 一.下载第三方库 https://github.com/samv ...
- 微信小程序开发之 下拉刷新,上拉加载更多
本文记载了如何在微信小程序里面实现下拉刷新,上拉加载更多 先开看一下界面 大致如此的界面吧. 这个Demo使用了微信的几个Api和事件,我先列出来. 1.wx.request (获取远程服务器的数据, ...
- iOS开发 XML解析和下拉刷新,上拉加载更多
iOS开发 XML解析和下拉刷新,上拉加载更多 1.XML格式 <?xml version="1.0" encoding="utf-8" ?> 表示 ...
- XListview的下拉刷新、上拉加载、用Pull解析XML
做之前需要导入XListview的文件,此是用第三方的xListview实现的,东西没写全.此是在Fragment中实现的 //--------------XListView的布局---------- ...
- google官方的下拉刷新+自定义上拉加载更多
转载请标注转载:http://blog.csdn.net/oqihaogongyuan/article/details/50949118 google官方的下拉刷新+自定义上拉加载更多 现在很多app ...
随机推荐
- FastJson中JSONString与各个对象的的转换关系及API示例
前言 JSON作为一种轻量级的数据交换格式,在我们日常的开发中使用十分广泛,就Java后端的开发工作中,JSON字符串与Java对象之间相互转换是常常遇到的操作. 虽然平时用到的挺多的,但是因为用于J ...
- Cesium专栏-雷达遮罩动态扫描(附源码下载)
Cesium 是一款面向三维地球和地图的,世界级的JavaScript开源产品.它提供了基于JavaScript语言的开发包,方便用户快速搭建一款零插件的虚拟地球Web应用,并在性能,精度,渲染质量以 ...
- 3.Redux学习3----redux-saga
redux-saga和redux-thunk功能差不多,都是为了避免直接在组件生命周期函数中做异步操作,便于自动化测试,便于拆分管理. 首先要下包 npm i redux-saga 第零步:在acti ...
- ASP.NET Aries 高级开发教程:表单检测字段是否已存(番外篇)
前言: 昨天刚好有人问了这个问题,因此就针对这个问题,补上一篇吧. 正文: 如图:在用户编辑列表中,用户名是会自动检测是否已存在的. 具体对应的Html内容如下: <label><e ...
- 如何实现一台服务器同时运行两个php版本
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 假设您已经安装了Apache,为这两个项目创建了虚拟主机,并添加 ...
- Spring Boot Security 保护你的程序
Spring Boot Security 本示例要内容 基于角色的权限访问控制 加密.解密 基于Spring Boot Security 权限管理框架保护应用程序 String Security介绍 ...
- Python中定义只读属性
Python是面向对象(OOP)的语言, 而且在OOP这条路上比Java走得更彻底, 因为在Python里, 一切皆对象, 包括int, float等基本数据类型. 在Java里, 若要为一个类定义只 ...
- Java内存区域与内存溢出异常,对象的创建
一.运行时数据区域 Java程序的执行流程:首先 .java源代码文件会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执 ...
- javascript中常见的几种循环遍历
项目开发中,不管是建立在哪个框架基础上,对数据的处理都是必须的,而处理数据离不开各种遍历循环.javascript中循环遍历有很多种方式,记录下几种常见的js循环遍历. 一.for循环 for循环应该 ...
- 与用户xxx一起提供的密码不正确。请确认输入的密码正确并重试
环境: SharePoint 2010 / 2013 以系统账户身份登录管理中心,然后创建Web Application,报: 与用户xxx一起提供的密码不正确.请确认输入的密码正确并重试 明明都已经 ...