SuperAPI AI 工具集

riverpod-cancel

编程与开发

查看项目

更新于 10-16 01:13

技能介绍

用途:在 Riverpod 中取消或防抖异步请求。核心手段是 ref.onDispose 配合 auto-dispose(或 ref.watch),当用户离开页面时取消进行中的请求,或对快速重复的刷新做防抖。

离开页面时取消:确保 provider 为 auto-dispose。用户离开后 provider 失去监听者并被销毁,ref.onDispose 随之执行。在该回调中取消请求,例如关闭用于请求的 HTTP 客户端。示例模式:在 provider 中创建 http.Client(),传给请求逻辑,并调用 ref.onDispose(client.close);provider 销毁时客户端关闭、请求取消。具体 API 取决于所用 HTTP 包。

防抖刷新:若用户快速多次触发刷新,可延迟到停止后再发请求(例如 500ms)。模式:在 provider 中设标志(如 didDispose = false)并 ref.onDispose(() => didDispose = true);await Future.delayed(duration);若 didDispose 为 true,说明延迟期间又触发了刷新,抛出以中止(Riverpod 会捕获并忽略);否则创建客户端、注册 onDispose(client.close) 并执行请求。即先延迟,再创建客户端并请求;延迟期间被销毁则中止,创建客户端后被销毁则取消请求。

可复用扩展:可在 Ref 上实现扩展,返回带防抖/可取消的客户端:用 onDispose 设置“已取消”标志;等待防抖时长,若已销毁则抛出;创建客户端、注册 onDispose(client.close) 并返回。在 activity/provider 中使用该扩展,所有调用点都能获得防抖与取消行为。完整扩展示例见 Riverpod 官方“cancel”操作指南。