用途:在 Flutter 应用中结合 Riverpod 实现下拉刷新,利用 provider 失效与 AsyncValue 自动处理加载、数据、错误三种状态。
主要能力:定义一个异步 provider(如 FutureProvider 或 AsyncNotifierProvider)获取数据,用 ref.watch(provider) 获得 AsyncValue;把可滚动组件(ListView、SingleChildScrollView 等)包在 RefreshIndicator 中;在 onRefresh 调用 ref.refresh(provider.future),使指示器保持到新数据加载完成。
状态处理:初次加载(无数据无错误)显示全屏转圈;刷新期间显示刷新指示器并保留旧数据或旧错误,直到新结果到达;有数据时展示值;出错时展示错误。示例(语法可能因 Riverpod 版本而异):
RefreshIndicator( onRefresh: () => ref.refresh(activityProvider.future), child: ListView( children: [ // content ], ), )
final activity = ref.watch(activityProvider); switch (activity) { AsyncValue<Activity>(:final value?) => Text(value.activity), AsyncValue(:final error?) => Text('Error: $error'), _ => const CircularProgressIndicator(), }
若 API 提供 valueOrNull 等可空取值方法可选用。
适用场景:需要下拉重新拉取远程数据并保留旧内容的列表或滚动页面。
限制:具体 AsyncValue API 因 Riverpod 版本而异,需查阅所用版本文档;资料未提供完整依赖配置、安装命令与更多细节。