Flutter EasyRefresh:介绍与使用指南
什么是 Flutter EasyRefresh?
Flutter EasyRefresh 是一个强大的下拉刷新和上拉加载组件,用于构建流畅且高效的 Flutter 应用程序。它提供了多种自定义配置和动画效果,使开发者可以轻松实现列表的刷新和加载功能。
主要功能
- 支持下拉刷新和上拉加载:可以分别设置刷新和加载的回调函数。
- 丰富的刷新样式:内置了多种常用的刷新样式,如经典样式、球脉冲样式等。
- 自定义 Header 和 Footer:开发者可以自定义刷新头部和加载尾部的样式。
- 支持横向刷新:不仅支持垂直方向的刷新,还支持水平方向的刷新。
- 与 ScrollView 完美结合:与 ListView、GridView、CustomScrollView 等 Flutter 内置的滚动视图无缝结合。
安装
在 pubspec.yaml 文件中添加 easy_refresh 依赖:
dependencies:flutter:sdk: fluttereasy_refresh: ^请使用最新版本
然后运行 flutter pub get 命令来安装依赖。
基本使用
下面是一个简单的示例,展示如何在 Flutter 中使用 EasyRefresh 实现下拉刷新和上拉加载:
import 'package:flutter/material.dart';
import 'package:easy_refresh/easy_refresh.dart';void main() => runApp(MyApp());class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('EasyRefresh 示例')),body: RefreshList(),),);}
}class RefreshList extends StatefulWidget {_RefreshListState createState() => _RefreshListState();
}class _RefreshListState extends State<RefreshList> {List<int> _items = List.generate(20, (index) => index);EasyRefreshController _controller = EasyRefreshController();Widget build(BuildContext context) {return EasyRefresh(controller: _controller,onRefresh: () async {await Future.delayed(Duration(seconds: 2));setState(() {_items = List.generate(20, (index) => index);});_controller.finishRefresh(success: true);},onLoad: () async {await Future.delayed(Duration(seconds: 2));setState(() {_items.addAll(List.generate(20, (index) => _items.length + index));});_controller.finishLoad(success: true, noMore: _items.length >= 60);},child: ListView.builder(itemCount: _items.length,itemBuilder: (context, index) {return ListTile(title: Text('Item ${_items[index]}'));},),);}
}
在上面的代码中,我们创建了一个简单的列表,并通过 EasyRefresh 实现了下拉刷新和上拉加载的功能。EasyRefresh 通过 EasyRefreshController 来控制刷新和加载的状态。
自定义 Header 和 Footer
如果内置的样式不能满足需求,可以自定义 Header 和 Footer:
import 'package:flutter/material.dart';
import 'package:easy_refresh/easy_refresh.dart';class CustomHeader extends Header {Widget build(BuildContext context, RefreshMode mode, double pulledExtent, double refreshTriggerPullDistance, double refreshIndicatorExtent, AxisDirection axisDirection, bool float, Duration completeDuration, bool enableInfiniteRefresh, bool success, bool noMore) {return Container(alignment: Alignment.center,child: Text(mode == RefreshMode.inactive ? '下拉刷新' : '刷新中...'),);}
}class CustomFooter extends Footer {Widget build(BuildContext context, LoadMode mode, double pulledExtent, double loadTriggerPullDistance, double loadIndicatorExtent, AxisDirection axisDirection, bool float, Duration completeDuration, bool enableInfiniteLoad, bool success, bool noMore) {return Container(alignment: Alignment.center,child: Text(mode == LoadMode.inactive ? '上拉加载' : '加载中...'),);}
}void main() => runApp(MyApp());class MyApp extends StatelessWidget {Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: Text('自定义 Header 和 Footer')),body: RefreshList(),),);}
}class RefreshList extends StatefulWidget {_RefreshListState createState() => _RefreshListState();
}class _RefreshListState extends State<RefreshList> {List<int> _items = List.generate(20, (index) => index);EasyRefreshController _controller = EasyRefreshController();Widget build(BuildContext context) {return EasyRefresh(controller: _controller,header: CustomHeader(),footer: CustomFooter(),onRefresh: () async {await Future.delayed(Duration(seconds: 2));setState(() {_items = List.generate(20, (index) => index);});_controller.finishRefresh(success: true);},onLoad: () async {await Future.delayed(Duration(seconds: 2));setState(() {_items.addAll(List.generate(20, (index) => _items.length + index));});_controller.finishLoad(success: true, noMore: _items.length >= 60);},child: ListView.builder(itemCount: _items.length,itemBuilder: (context, index) {return ListTile(title: Text('Item ${_items[index]}'));},),);}
}
通过自定义 Header 和 Footer,我们可以实现与应用风格一致的刷新和加载动画。
结论
Flutter EasyRefresh 是一个功能强大且灵活的刷新组件,适用于各种应用场景。通过它,我们可以轻松地实现用户友好的下拉刷新和上拉加载功能,为用户提供更好的体验。希望这篇文章能帮助你快速上手 Flutter EasyRefresh,并在你的项目中发挥它的作用。
相关文章:
Flutter EasyRefresh:介绍与使用指南
什么是 Flutter EasyRefresh? Flutter EasyRefresh 是一个强大的下拉刷新和上拉加载组件,用于构建流畅且高效的 Flutter 应用程序。它提供了多种自定义配置和动画效果,使开发者可以轻松实现列表的刷新和加载功能。 主要功能 支持下拉刷新和…...
链表的回文结构(链表的中间节点+反转链表)
链表的回文结构 一.链表的中间节点思路1:暴力求解思路2:快慢指针 二.返回倒数第k个节点思路1:暴力求解思路2:快慢指针 三.反转链表思路1:头插法思路2:反转指针的指向 四.链表的回文结构思路1:利…...
汇编学习基础知识【记录】
前言 又是快乐的学习汇编的一天,时间如白驹过隙,抓紧时间,在学习能力最好的年纪多学习一些知识,朝着美好生活而奋斗!哈哈哈 参考文章: https://blog.csdn.net/Z_H_Z_0/article/details/106574292 知识补…...
【持续集成_06课_Jenkins高级pipeline应用】
一、创建项目选择pipeline的风格 它主要是以脚本(它自己的语言)的方式进行运行,一般由运维去做的事情,作为测试而言。了解即可。 --- 体现形式全部通过脚本去实现:执行之前(拉取代码)执行&…...
taro小程序terser-webpack-plugin插件不生效(vue2版本)
背景 最近在做公司内部的小程序脚手架,为了兼容老项目和旧项目,做了vue2taro,vue3taro两个模板,发现terser-webpack-plugin在vue2和vue3中的使用方式并不相同,同样的配置在vue3webpack5中生效,但是在vue2webpack4中就…...
games103作业2(未完)
PBD方法 首先是每个质点的力的分析,不考虑碰撞和弹簧弹力的情况下,每个质点受重力的影响,所以需要对每个质点进行速度和位置的重力影响更新。 float t 0.0333f; float damping 0.99f; int[] E; float[] L; Vector3[] V; Vector3 gra…...
避免 WebSocket 连接被拒绝
一、检查服务器配置和权限 (一)确认服务器访问权限 确保您的客户端有访问服务器的合法权限。如果服务器设置了访问控制列表(ACL)或仅允许特定的源(Origin)进行连接,您需要确保客户端的请求来源在允许的范围内。例如,如果服务器只允许来自特定域名的连接,而您的客户端从…...
shell中关于数组的使用
shell中关于数组的使用 在Shell中,数组是一种可以存储多个值的变量。数组的每个值都由一个数字索引来访问。在Shell中,数组的索引从0开始。 数组的常见的使用方法包括 数组的定义数组的打印数组长度数组的遍历数组元素的打印数组元素的添加数组元素的…...
python:绘制一元三次函数的曲线
编写 test_x3_3x.py 如下 # -*- coding: utf-8 -*- """ 绘制函数 y x^33x4 在 -3<x<3 的曲线 """ import numpy as np from matplotlib import pyplot as plt# 用于正常显示中文标题,负号 plt.rcParams[font.sans-serif] […...
SAP PP学习笔记26 - User Status(用户状态)的实例,订单分割中的重要概念 成本收集器,Confirmation(报工)的概述
上面两章讲了生产订单的创建以及生产订单的相关内容。 SAP PP学习笔记24 - 生产订单(制造指图)的创建_sap 工程外注-CSDN博客 SAP PP学习笔记25 - 生产订单的状态管理(System Status(系统状态)/User Status(用户状态)),物料的可用性检查,生…...
ctfshow-web入门-php特性(web104-web108)
目录 1、web104 2、web105 3、web106 4、web107 5、web108 1、web104 需要传入的 v1 和 v2 进行 sha1 加密后相等。 解法1: 这里都没有判断 v1 和 v2 是否相等,我们直接传入同样的内容加密后肯定也一样。 ?v21 post: v11 拿到 flag…...
python之集合相关
1.概况 是无序的数据结构 集合内的个体统称为元素,每个元素不可重复 所有元素被放在大括号里面,元素之间通过逗号分隔 集合对象是一组无序的可哈希的值,集合元素是不可变的数据类型 2.定义集合 使用大括号语法 基本语法: {元素1&a…...
【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十一)-无人机服务可用性用例需求
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...
【Linux 配置静态IP】Ubuntu20.04
最近学习网络编程,为了方便学习需要Ubuntu配置静态IP,网上看了好多贴子跟着试了下可以实现,但重启虚拟机后有时就无法连接,总之各种各样问题;相关的配置方法也比较凌乱,有用netplan 或者 ifupdown ,笔者简单…...
C++入门基础(2)
C入门基础(2) 1.缺省函数2.函数重载3.引用3.1 引用的概念和定义3.2 引用的特性3.3 引用的使用3.3.1引用的特性 4 .const引用5. 指针和引用的关系6.inline 1.缺省函数 • 缺省参数是声明或定义函数时为函数的参数指定⼀个缺省值。在调用该函数时…...
芋道框架万字详解(前后端分离)、若依框架、yudao-cloud保姆级攻略
♥️作者:小宋1021 🤵♂️个人主页:小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!! 🎈🎈加油! 加油!…...
Java程序打印日志
一、maven依赖 POM文件中添加以下依赖,maven依赖的jar包版本可以在maven central repository 查看 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.34</version><…...
深入理解C++ 中的可调⽤对象
C中的可调⽤对象总结 普通函数类成员函数类静态成员函数与类成员函数的区别 仿函数简单示例高级用法-状态保持优缺点优点缺点 函数指针获取函数地址声明并调用函数指针 lambda表达式语法定义捕获单个捕获符 std::function()协程 可调用对象用处⼴泛: ⽐如在使⽤⼀些…...
汇编程序调用 C 程序详解
文章目录 1. ATPCS 规则 2. 汇编和C程序传递参数 汇编程序向 C 程序的函数传递参数 C 程序返回结果给汇编程序 代码示例 3. C 函数使用栈 4. C 语言中读写寄存器 在嵌入式开发中,经常需要在 C 程序和 ARM 汇编程序之间进行相互调用。为了保证这些调用的正确性…...
代码随想三刷图论篇1
代码随想三刷图论篇1 98. 所有可达路径题目代码99. 岛屿数量题目代码100. 岛屿的最大面积题目代码101. 孤岛的总面积题目代码102. 沉没孤岛题目代码103. 水流问题题目代码98. 所有可达路径 题目 链接 代码 import java.util.*;class Main{public static void main(String […...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
Java 8 Stream API 入门到实践详解
一、告别 for 循环! 传统痛点: Java 8 之前,集合操作离不开冗长的 for 循环和匿名类。例如,过滤列表中的偶数: List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
跨链模式:多链互操作架构与性能扩展方案
跨链模式:多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈:模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展(H2Cross架构): 适配层…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)
漏洞概览 漏洞名称:Apache Flink REST API 任意文件读取漏洞CVE编号:CVE-2020-17519CVSS评分:7.5影响版本:Apache Flink 1.11.0、1.11.1、1.11.2修复版本:≥ 1.11.3 或 ≥ 1.12.0漏洞类型:路径遍历&#x…...
