当前位置: 首页 > news >正文

flutter实现上拉加载下拉刷新

效果如下:

flutter实现上拉加载下拉刷新

使用到的库是easy_refresh

安装请查看官网

接口用的是提供的接口https://reqres.in/

请求接口用到的库是dio

下面主要是介绍如何使用easy_refresh实现上拉加载数据,详细学习其它例子请查看easy_refresh

main.dart全部代码如下

import 'package:flutter/material.dart';
import 'package:easy_refresh/easy_refresh.dart';
import 'package:dio/dio.dart' as MyDio;void main() => runApp(const MyApp());class MyApp extends StatelessWidget {const MyApp({Key? key}) : super(key: key);@overrideWidget build(BuildContext context) {return const MaterialApp(title: 'EasyRefresh',home: HomePage(),);}
}class HomePage extends StatefulWidget {const HomePage({Key? key}) : super(key: key);@overrideState<HomePage> createState() => _HomePageState();
}class _HomePageState extends State<HomePage> {int _page = 1;List<UserData> dataList = [];late EasyRefreshController _controller;@overridevoid initState() {super.initState();_controller = EasyRefreshController(controlFinishRefresh: true,controlFinishLoad: true,);setState(() {dataList = [];_page = 1;});initListData();}@overridevoid dispose() {_controller.dispose();super.dispose();}Future<ApiResponse> _fetchListData(int page) async {MyDio.Dio dio = MyDio.Dio();MyDio.Response response =await dio.get('https://reqres.in/api/users', queryParameters: {'page': page,});ApiResponse data = ApiResponse.fromJson(response.data);return data;}void initListData() async {final resData = await _fetchListData(_page);if (resData.data.isNotEmpty) {setState(() {dataList = dataList..addAll(resData.data);_page = _page + 1;});_controller.finishRefresh();_controller.resetFooter();initListData();}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('EasyRefresh'),),body: EasyRefresh(controller: _controller,header: const ClassicHeader(armedText: '下拉加载更多',readyText: '正在加载中...',showMessage: false,processedText: '加载完成',processingText: '刷新中...',textStyle: TextStyle(color: Color(0xFFFF2B2B))),footer: const ClassicFooter(noMoreText: '没有更多数据了',noMoreIcon: Icon(Icons.mood_rounded),showMessage: false,processingText: '正在加载中...',textStyle: TextStyle(color: Color(0xFF846FFD))),onRefresh: () async {setState(() {dataList = [];_page = 1;});initListData();},onLoad: () async {final resData = await _fetchListData(_page);setState(() {dataList = dataList..addAll(resData.data);_page = _page + 1;});_controller.finishLoad(resData.data.isEmpty? IndicatorResult.noMore: IndicatorResult.success);// _fetchListData(_page);},child: ListView.builder(itemBuilder: (context, index) {return Card(child: Container(alignment: Alignment.center,height: 80,// ignore: unnecessary_string_interpolationschild: Text('${dataList[index].firstName}'),),);},itemCount: dataList.length,),),);}
}class ApiResponse {final int page;final int perPage;final int total;final int totalPages;final List<UserData> data;final Support support;ApiResponse({required this.page,required this.perPage,required this.total,required this.totalPages,required this.data,required this.support});factory ApiResponse.fromJson(Map<String, dynamic> json) {var list = json['data'] as List;List<UserData> dataList = list.map((i) => UserData.fromJson(i)).toList();return ApiResponse(page: json['page'],perPage: json['per_page'],total: json['total'],totalPages: json['total_pages'],data: dataList,support: Support.fromJson(json['support']),);}
}class UserData {final int id;final String email;final String firstName;final String lastName;final String avatar;UserData({required this.id,required this.email,required this.firstName,required this.lastName,required this.avatar});factory UserData.fromJson(Map<String, dynamic> json) {return UserData(id: json['id'],email: json['email'],firstName: json['first_name'],lastName: json['last_name'],avatar: json['avatar'],);}
}class Support {final String url;final String text;Support({required this.url, required this.text});factory Support.fromJson(Map<String, dynamic> json) {return Support(url: json['url'],text: json['text'],);}
}
http://www.lryc.cn/news/226312.html

相关文章:

  • tomcat+idea--如何在idea上发布项目
  • 考研数据结构单链表的增删改查看这一篇就够了
  • Windows查看端口占用情况
  • Python:词法分析(行结构与显式、隐式行拼接)
  • 前端Vue 结合xlxs库实现解析excel文件,并动态组装表头!
  • RabbitMQ集群配置以及负载均衡配置
  • Leetcode Hot100之六:42.接雨水
  • electron 主进程 和 渲染进程通信 ipcRenderer 和 mainWindow.webContents
  • 关于VUE启动内存溢出
  • HBase学习笔记(1)—— 知识点总结
  • 【Linux】 awk命令使用
  • Sentinel网关限流
  • solidworks对电脑要求高吗?2023solidworks配置要求
  • 搭建神经网络(torch.nn的用法)
  • 卡码网语言基础课 | 11. 句子缩写
  • Surface RT 安装 Linux
  • C++中的函数重载:多功能而强大的特性
  • 数据分析实战 | K-means算法——蛋白质消费特征分析
  • HTTP协议详解-下(Tomcat)
  • acwing算法基础之搜索与图论--prim算法
  • Amazon EC2 Serial Console 现已在其他亚马逊云科技区域推出
  • hdlbits系列verilog解答(100输入逻辑门)-39
  • Python 中 Selenium 的屏幕截图
  • scrapy发json的post请求
  • 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
  • 自主开发刷题应用网站H5源码(无需后端无需数据库)
  • java 读取excel/word存入mysql
  • 11.(vue3.x+vite)组件间通信方式之ref与$parent、$children
  • [工业自动化-12]:西门子S7-15xxx编程 - PLC从站 - ET200 SP系列详解
  • 消息队列简介