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

flutter开发实战-下拉刷新与上拉加载更多实现

flutter开发实战-下拉刷新与上拉加载更多实现

在开发中经常遇到列表需要下拉刷新与上拉加载更多,这里使用EasyRefresh,版本是3.3.2+1

一、什么是EasyRefresh

EasyRefresh可以在Flutter应用程序上轻松实现下拉刷新和上拉加载。它几乎支持所有Flutter Scrollable小部件。它的功能与安卓的SmartRefreshLayout非常相似,也吸收了许多第三方库的优势。EasyRefresh集成了各种风格的页眉和页脚,但它没有任何限制,您可以轻松自定义。使用Flutter强大的动画,即使只是一个简单的控制也可以完成。EasyRefresh的目标是为Flutter创建一个强大、稳定、成熟的pull-to-refresh框架。

二、实现下拉刷新与上拉加载更多

在pubspec.yaml中引入EasyRefresh

 # 下拉刷新、上拉更多easy_refresh: ^3.3.2+1

在使用EasyRefresh过程中,需要用到EasyRefreshController来控制刷新结束。

/// Finish the refresh task and return the result./// [result] Result of task completion./// [force] Enforced, used to modify the result.void finishRefresh([IndicatorResult result = IndicatorResult.success, bool force = false]) {assert(controlFinishRefresh || force,'Please set controlFinishRefresh to true, then use. If you want to modify the result, you can set force to true.');_state?._headerNotifier._finishTask(result);}/// Finish the load task and return the result./// [result] Result of task completion./// [force] Enforced, used to modify the result.void finishLoad([IndicatorResult result = IndicatorResult.success, bool force = false]) {assert(controlFinishLoad || force,'Please set controlFinishLoad to true, then use. If you want to modify the result, you can set force to true.');_state?._footerNotifier._finishTask(result);}

整体实现下拉刷新与上拉加载更多完整代码如下

import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';class RefreshPage extends StatefulWidget {const RefreshPage({super.key});State<RefreshPage> createState() => _RefreshPageState();
}class _RefreshPageState extends State<RefreshPage> {int _count = 10;late EasyRefreshController _controller;void initState() {super.initState();_controller = EasyRefreshController(controlFinishRefresh: true,controlFinishLoad: true,);}void dispose() {_controller.dispose();super.dispose();}Widget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('EasyRefresh'),),body: EasyRefresh(controller: _controller,header: const BezierCircleHeader(),footer: const ClassicFooter(),onRefresh: () async {await Future.delayed(const Duration(seconds: 4));if (!mounted) {return;}setState(() {_count = 10;});_controller.finishRefresh();_controller.resetFooter();},onLoad: () async {await Future.delayed(const Duration(seconds: 4));if (!mounted) {return;}setState(() {_count += 5;});_controller.finishLoad(_count >= 20 ? IndicatorResult.noMore : IndicatorResult.success);},child: ListView.builder(itemBuilder: (context, index) {return Card(child: Container(alignment: Alignment.center,height: 80,child: Text('${index + 1}'),),);},itemCount: _count,),),);}
}

整体效果图如下

在这里插入图片描述

三、实现下拉刷新与上拉加载更多

flutter开发实战-下拉刷新与上拉加载更多实现。

https://blog.csdn.net/gloryFlow/article/details/133869961

学习记录,每天不停进步。

http://www.lryc.cn/news/195360.html

相关文章:

  • 旧手机热点机改造成服务器方案
  • 网工实验笔记:策略路由PBR的应用场景
  • webrtc快速入门——使用 WebRTC 拍摄静止的照片
  • 预约按摩app软件开发定制足浴SPA上们服务小程序
  • jenkins出错与恢复
  • ssh免密登录的原理RSA非对称加密的理解
  • 【监督学习】基于合取子句进化算法(CCEA)和析取范式进化算法(DNFEA)解决分类问题(Matlab代码实现)
  • 力扣每日一题41:缺失的第一个正数
  • OpenCV与mediapipe实践
  • 【css拾遗】粘性布局实现有滚动条的情况下,按钮固定在页面底部展示
  • git 创建并配置 GitHub 连接密钥
  • 使用Premiere、PhotoShop和Audition做视频特效
  • vueday01——动态参数
  • 双向链表C语言版本
  • visual studio安装时候修改共享组件、工具和SDK路径方法
  • Motorola IPMC761 使用边缘TPU加速神经网络
  • EM@直线的参数方程
  • day08-注册功能、前端登录注册页面复制、前端登录功能、前端注册功能
  • rust: function
  • 零代码编程:用ChatGPT批量下载谷歌podcast上的播客音频
  • nginx.4——正向代理和反向代理(七层代理和四层代理)
  • 基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程(三)
  • Spring-事务源码解析2
  • 基于ssm008医院门诊挂号系统+jsp【附PPT|开题|任务书|万字文档(LW)和搭建文档】
  • 【Linux常用命令11】Linux文件与权限详解
  • BAT026:删除当前目录指定文件夹以外的文件夹
  • Python浏览器自动化
  • 基于tornado BELLE 搭建本地的web 服务
  • 信息系统漏洞与风险管理制度
  • Hadoop3教程(十七):MapReduce之ReduceJoin案例分析