效果图:


学习之前需要导入Dio库,具体用法与导入连接请查看我的博客
Flutter进阶第2篇:Dio库实现网络请求以及动态渲染数据

News.dart

import 'package:flutter/material.dart';import 'dart:convert';
import 'package:dio/dio.dart';class NewsPage extends StatefulWidget {NewsPage({Key key}) : super(key: key);_NewsPageState createState() => _NewsPageState();
}class _NewsPageState extends State<NewsPage> {List _list = [];int _page = 1;bool hasMore = true; //判断有没有数据ScrollController _scrollController = new ScrollController();@overridevoid initState() {// TODO: implement initStatesuper.initState();this._getData();//监听滚动条事件_scrollController.addListener(() {print(_scrollController.position.pixels); //获取滚动条下拉的距离print(_scrollController.position.maxScrollExtent); //获取整个页面的高度if (_scrollController.position.pixels >_scrollController.position.maxScrollExtent - 40) {this._getData();}});}void _getData() async {if (this.hasMore) {var apiUrl ="http://www.phonegap100.com/appapi.php?a=getPortalList&catid=20&page=${_page}";var response = await Dio().get(apiUrl);var res = json.decode(response.data)["result"];   setState(() {this._list.addAll(res);  //拼接this._page++;});//判断是否是最后一页if (res.length < 20) {setState(() {this.hasMore = false;});}}}//下拉刷新Future<void> _onRefresh() async {await Future.delayed(Duration(milliseconds: 2000), () {print('请求数据完成');_getData();});}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("新闻列表"),),body: this._list.length > 0? RefreshIndicator(onRefresh: _onRefresh,child: ListView.builder(controller: _scrollController,itemCount: this._list.length, //20itemBuilder: (context, index) {//19                  if (index == this._list.length-1) {   //列表渲染到最后一条的时候加一个圈圈//拉到底return Column(children: <Widget>[ListTile(title: Text("${this._list[index]["title"]}",maxLines: 1),),Divider(),_getMoreWidget()],);} else {return Column(children: <Widget>[ListTile(title: Text("${this._list[index]["title"]}",maxLines: 1),),Divider()],);}},)): _getMoreWidget(),);}//加载中的圈圈Widget _getMoreWidget() {if(hasMore){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,)],),),);}else{return Center(child: Text("--我是有底线的--"),);}}
}

Flutter进阶第3篇:下拉刷新 上拉分页加载更多相关推荐

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

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

  2. 微信小程序如何实现上拉刷新(即分页加载数据)?

      步骤1. enablePullDownRefresh这个属性设置为true.enablePullDownRefresh可以写在app.json 中和页面的xx.json,两者的区别是, app.j ...

  3. 分享轮子-flutter下拉刷新上拉加载

    flutter下拉上拉组件轮子 什么是flutter? 首先说下flutter,估计这个应该挺多人没听过flutter这个框架,它是一个google推出的跨平台的移动应用UI框架,和React Nat ...

  4. php下拉上滑分页,Flutter实现下拉刷新 上拉分页加载更多

    一.Flutter实现下拉刷新和上拉分页加载更多 在Flutter官方sdk中给我们提供了下拉刷新的组件RefreshIndicator.但是没有提供上拉分页加载更多的组件.但是在Flutter Li ...

  5. Android ListView 实现下拉刷新上拉加载

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39965327 1.简介 无疑,在Android开发中,ListView是使用非常频 ...

  6. listview下拉刷新上拉加载扩展(三)-仿最新版美团外卖

    本篇是基于上篇listview下拉刷新上拉加载扩展(二)-仿美团外卖改造而来,主要调整了headview的布局,并加了两个背景动画,看似高大上,其实很简单: as源码地址:http://downloa ...

  7. 开启Fluter基础之旅五-------ListView 3D滚动、Flipper效果、ListView下拉刷新上拉加载、ListView重排序...

    继续来来操练Flutter的基础,对于Flutter的学习也有一段时间了,实操项目还木有做过,所以待这次基础学完之后就打算用一个项目对之前所学的进行一下巩固,不然光学这些零散的知识点最终还是不会Flu ...

  8. Android自定义控件实战——实现仿IOS下拉刷新上拉加载 PullToRefreshLayout

    下拉刷新控件,网上有很多版本,有自定义Layout布局的,也有封装控件的,各种实现方式的都有.但是很少有人告诉你具体如何实现的,今天我们就来一步步实现自己封装的 PullToRefreshLayout ...

  9. listview下拉刷新上拉加载扩展(二)-仿美团外卖

    经过前几篇的listview下拉刷新上拉加载讲解,相信你对其实现机制有了一个深刻的认识了吧,那么这篇文章我们来实现一个高级的listview下拉刷新上拉加载-仿新版美团外卖的袋鼠动画: 项目结构: 是 ...

  10. 下拉加载 实现 java_[Java教程]iscroll5实现一个下拉刷新上拉加载的效果

    [Java教程]iscroll5实现一个下拉刷新上拉加载的效果 0 2016-08-24 15:00:08 直接上代码!!! * { margin: 0; padding: 0; } ul, li { ...

最新文章

  1. linux sed 选取,linux sed 替换(整行替换,部分替换)、删除delete、新增add、选取...
  2. python turtle画熊-Python使用turtle库绘制小猪佩奇(实例代码)
  3. (仿头条APP项目)6.点击过的新闻列表文字变灰和下拉刷新与滚动加载新闻数据
  4. C语言学习之输入两个正整数m和n,求其最大公约数和最小公倍数。
  5. hashtable——散列表
  6. 身体容易缺少的微量元素
  7. Java字符编码介绍
  8. CSerialPort串口类最新修正版(解决关闭死锁问题)
  9. HBase笔记整理(二)
  10. android学习笔记25——事件处理Handler
  11. 基于改进蜂群算法和灰色模型的管道腐蚀预测 - 附代码
  12. 行业软件之PTV微观软件VISSIM4.3 5.0 5.1 5.2 5.3 5.4下载和相关资料
  13. 用户体验的要素pdf_用户运营思路(35份)
  14. 软件测试 查看网页打开时间,网页响应时间101(一)
  15. docker compose自定义IP报错ERROR: Pool overlaps with other one on this address space
  16. Arduino智能物流小车项目(MEGA2560)
  17. PTA 一维数组 7-3 删除指定数据
  18. Win10系统的截图功能 几种快捷键 以及QQ附带的截图功能
  19. 向量组相关定理及其推论
  20. [Visual Studio 2022 C#]使用SplitContainer拆分器让一个Windows窗口秒变多个

热门文章

  1. Java集合---ConcurrentHashMap原理分析
  2. JavaWeb开发中的乱码问题
  3. 利用pt-table-checksum校验数据一致性
  4. 用有道ip地址查询接口的详细方法
  5. GridView中的格式化
  6. 高等数学_第一章第一节_映射与级数
  7. pandas学习、热力图、子图
  8. 论文写不出来,导师放养,严重焦虑,怎么办?
  9. 让AI捕捉“七情”,多模态情感分析的应用和挑战
  10. 【一分钟论文】轻松解读Semi-supervised Sequence Learning半监督序列学习