flutter-custom-refresh-indicator

flutter-custom-refresh-indicator

Flutter自定义刷新指示器开发工具

flutter-custom-refresh-indicator是一个用于创建自定义刷新指示器的Flutter插件。它支持水平和垂直列表、双向触发刷新,并提供多种示例和详细文档。该插件可用于替换Material指示器内容或构建复杂动画效果。通过灵活的API和状态管理,开发者可以轻松创建独特的刷新体验。

CustomRefreshIndicatorFlutter刷新指示器自定义控件用户界面Github开源项目

封面图片

自定义刷新指示器

测试

轻松创建你自己的自定义刷新指示器小部件!

特性:

简而言之;在线演示


快速开始

CustomMaterialIndicator

如果你只想替换材料指示器的内容,可以使用 CustomMaterialIndicator 小部件,它构建了一个材料容器。除了内置的 RefreshIndicator 之外,它还支持水平列表和从两个边缘触发(参见 trigger 参数)。

CustomMaterialIndicator( onRefresh: onRefresh, // 你的刷新逻辑 backgroundColor: Colors.white, indicatorBuilder: (context, controller) { return Padding( padding: const EdgeInsets.all(6.0), child: CircularProgressIndicator( color: Colors.redAccent, value: controller.state.isLoading ? null : math.min(controller.value, 1.0), ), ); }, child: child, )

效果:

<div align="center"> <a href="https://custom-refresh-indicator.klyta.it/#/presentation" target="_blank"> <img width="200px" src="https://yellow-cdn.veclightyear.com/835a84d5/6823fd5b-fd56-4b91-9bb8-ce8b048b9b8b.gif" alt="控制器数据示例" > </a> </div>

CustomRefreshIndicator

使用 CustomRefreshIndicator 小部件为你的 Flutter 应用程序升级定制刷新指示器。只需包裹你的可滚动列表,并设计你独特的指示器。就是这么简单!😏

CustomRefreshIndicator( onRefresh: onRefresh, // 你的刷新逻辑 builder: (context, child, controller) { // 在这里放置你的自定义指示器。 // 需要灵感?看看示例应用程序! return MyIndicator( child: child, controller: controller, ); }, child: ListView.builder( itemBuilder: (_, index) => Text('项目 $index'), ), )

效果: 可能性是什么?

你的创造力设定了界限!浏览我们的示例(只需向下滚动一点 👇)看看你可以构建什么。从微妙的动画到引人注目的视觉效果,让刷新动作成为一个愉悦的时刻。🚀

示例

所有这些示例都可以在示例应用程序中找到。

飞机指示器冰淇淋扭曲
飞机指示器冰淇淋指示器扭曲指示器
[源代码] [演示][源代码] [演示][源代码] [演示]
完整状态下拉获取更多信封
完整状态获取更多信封指示器
[源代码] [演示][源代码] [演示][源代码] [演示]
可控制的基于拖动细节你的指示器
程序控制拖动细节你创建了一个很棒的刷新指示器吗?这个位置是为你准备的。
[源代码] [演示][源代码] [演示][打开拉取请求]

文档

使用方法

这里是如何使用 CustomRefreshIndicator 的快速示例:

CustomRefreshIndicator( onRefresh: onRefresh, child: ListView( // 你的 ListView 内容在这里 ), builder: (BuildContext context, Widget child, IndicatorController controller) { // 在这里返回你的自定义指示器小部件 }, )

CustomRefreshIndicator 参数

基本

  • child (Widget): 将被下拉以触发刷新的滚动视图的内容。
  • builder (IndicatorBuilder): 返回将用作刷新指示器的小部件的函数。
  • onRefresh (AsyncCallback): 刷新开始时的回调。应返回一个 Future。
  • controller (IndicatorController?): 管理刷新指示器的状态和交互。

时间和持续时间

  • durations (RefreshIndicatorDurations)
    • cancelDuration: 取消后隐藏指示器的持续时间。
    • settleDuration: 释放后指示器稳定的持续时间。
    • finalizeDuration: 刷新后隐藏指示器的持续时间。
    • completeDuration: onRefresh 动作完成后指示器在完成状态保持可见的可选持续时间。如果未指定,指示器将跳过 complete 状态并直接过渡到 finalizing 状态,而不会保持在完成状态。

状态跟踪

  • onStateChanged (OnStateChanged?): 指示器状态变化时将被调用的回调。

自定义

  • notificationPredicate (ScrollNotificationPredicate): 确定哪些 ScrollNotifications 将触发指示器。
  • leadingScrollIndicatorVisible (bool): 前导滚动指示器的可见性。
  • trailingScrollIndicatorVisible (bool): 尾随滚动指示器的可见性。

触发行为

  • offsetToArmed (double?): 触发刷新的像素距离。
  • containerExtentPercentageToArmed (double?): 激活指示器的容器范围百分比。
  • trigger (IndicatorTrigger): 定义可以从哪个边缘触发刷新。
  • triggerMode (IndicatorTriggerMode): 配置触发刷新的条件。

性能

  • autoRebuild (bool): 是否在控制器更新时自动重建指示器。

指示器状态

CustomRefreshIndicator 管理各种状态以提供关于刷新过程的反馈。理解这些状态将帮助你自定义刷新指示器的行为和外观。

状态值范围描述
idle0.0默认状态,没有交互发生。指示器不可见。
dragging0.01.0用户正在下拉,但还未达到触发刷新的阈值。
armed大于等于 1.0下拉已超过阈值。现在释放将触发 onRefresh 回调。
canceling动画回到 0.0在达到阈值之前停止下拉;不会触发刷新,指示器收回。
loading稳定在 1.0onRefresh 回调处于活动状态,表示正在进行刷新操作。
complete稳定在 1.0刷新完成,如果设置了 completeDuration,指示器保持完全可见。
finalizing1.00.0刷新操作已完成,指示器正在动画回到初始状态。

每个状态转换都提供了一个机会来动画或调整 UI,为用户提供无缝和交互式的体验。

处理状态变化

要对状态变化做出反应,你可以这样设置 onStateChanged 回调:

CustomRefreshIndicator( onRefresh: onRefresh, // 使用 onStateChanged 回调跟踪状态变化。 onStateChanged: (IndicatorStateChange change) { // 从拖动状态转换到准备状态时,做些事情: if (change.didChange(from: IndicatorState.dragging, to: IndicatorState.armed)) { // 处理准备状态,例如,播放声音,开始动画等。 } // 从任何其他状态返回到空闲状态时,做些其他事情: else if (change.didChange(to: IndicatorState.idle)) { // 重置任何动画,更新 UI 元素等。 } // 根据需要处理其他状态变化... } // 其他属性... )

这种设置让你可以灵活地自定义用户与刷新指示器交互时的体验。例如,当状态从拖动变为准备时,你可以开始一个动画,向用户表明他们的动作将触发刷新。

触发模式

CustomRefreshIndicator 小部件提供了灵活的触发模式,定义了在可滚动列表中如何以及在哪里可以启动下拉刷新手势。

trigger (IndicatorTrigger)

这个属性决定了下拉刷新可以从列表的哪个边缘触发。它对于可以使用 reverse 参数反转的列表特别有用。

描述
leadingEdge下拉刷新手势只能从列表的前缘触发。对于标准列表通常是顶部,但当列表反转时变成底部。
trailingEdge下拉刷新只能从列表的后缘触发。通常是底部,但对于反转的列表则变成顶部。
bothEdges手势可以从列表的前缘和后缘触发,无论用户从哪一端开始拖动都可以实现下拉刷新功能。

triggerMode (IndicatorTriggerMode)

此属性控制了 CustomRefreshIndicator 如何根据拖动开始时可滚动区域的位置来激活。其行为类似于内置 RefreshIndicator 小部件的 triggerMode

描述
anywhere可以从可滚动内容的任何位置触发刷新,而不仅仅是从边缘。
onEdge只有当拖动手势开始时可滚动内容处于边缘位置,才会触发刷新。

默认情况下,triggerMode 设置为 onEdge,这意味着刷新操作通常在用户从内容的最顶部或最底部拖动时触发,具体取决于列表方向和 trigger 属性设置。

这些模式为开发者提供了对用户与刷新机制交互的控制,确保了适合应用功能上下文的流畅直观的用户体验。

IndicatorController 属性

CustomRefreshIndicator 小部件配备了一个控制器,让你可以访问刷新指示器的当前状态和行为。以下是对控制器属性的深入解析。

state (IndicatorState)

此属性表示指示器的当前状态。它反映了用户与下拉刷新手势的交互,以及指示器对这些交互的响应。

关于状态的更多信息可以在指示器状态部分找到。

edge (IndicatorEdge?)

此属性指示下拉刷新手势从列表的哪一端开始。

描述
start手势从列表开始处(通常是顶部)开始。
end手势从列表末端(通常是底部)开始。

trigger 设置为 bothEdges 时,edge 属性特别有用,允许从列表的起始或结束处识别手势。

side (IndicatorSide)

side 属性决定了指示器"应该"出现在可滚动区域的哪一侧。

描述
top将指示器放置在可滚动内容的顶部。
bottom将指示器放置在可滚动内容的底部。
left将指示器放置在可滚动内容的左侧。
right将指示器放置在可滚动内容的右侧。
none指示器不会显示在任何一侧。

direction (AxisDirection)

此属性标识可滚动内容移动的轴向。可以是 updownleftright

scrollingDirection (ScrollDirection)

这反映了用户当前在可滚动内容中滚动的方向。它有助于确定指示器对用户滚动操作的适当响应。

dragDetails (DragUpdateDetails?)

此属性提供了有关拖动更新事件的详细信息,包括拖动的位置和增量。

属性描述
globalPosition拖动更新发生时指针的全局位置。
delta自上次更新事件以来指针移动的增量距离。
primaryDelta沿主轴的增量距离(例如,对于垂直滚动列表来说是垂直方向)。

当你想根据用户拖动的精确移动实现自定义行为时,dragDetails 属性非常有价值,允许对刷新指示器的响应进行精细控制。

IndicatorController 展示

CustomRefreshIndicator 小部件旨在提供灵活且响应迅速的用户体验。为了更好地理解小部件如何根据用户交互更新控制器的数据,一个例子胜过千言万语。

请访问以下实时演示以查看 CustomRefreshIndicator 的运行情况:自定义刷新指示器实时示例

<div align="center"> <a href="https://custom-refresh-indicator.klyta.it/#/presentation" target="_blank"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/4dc4b9e2-040f-414f-9757-4a0ee782e846.gif" alt="控制器数据示例" > </a> </div>

支持

如果你喜欢这个包,从中学到了一些东西,或者只是不知道该怎么花你的钱 😅 就给我买杯咖啡 ☕️ 吧,这剂咖啡因会让我露出笑容,进而帮助我改进这个包。另外,作为感谢,你将在这个 readme 中被提及为赞助者。

<div align="center"> <a href="https://www.buymeacoffee.com/kamilklyta" target="_blank"><img height="60px" width="217px" src="https://yellow-cdn.veclightyear.com/835a84d5/5d12ae6f-31b8-4ac9-995b-f1d4565a4c89.png" alt="给我买杯咖啡" style="height: 60px !important;width: 217px !important;" ></a> </div> <p align="center">祝你有个愉快的一天!👋</p>

编辑推荐精选

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多