如何使用 Riverpod 在 Flutter 中刷新 FutureProvider 而无需再次显示加载指示器?

Flo*_*ser 10 mobile dart flutter riverpod

目前,我正在刷新一个 FutureProvider,它负责从 Firebase 获取数据并将其显示在带有Liquid_pull_to_refresh包的简单 ListView 中,这会导致列表消失,加载指示器再次显示,最后列表再次显示。

我想要实现的是保持列表显示,并且仅在获取完成后更新它。我正在使用 Riverpod 进行状态管理。

提供者:

final userProfileProvider = FutureProvider.family<FullUserModel?, String?>((ref, value) => ref.read(databaseServiceProvider).getFullUserModel(value));
Run Code Online (Sandbox Code Playgroud)

刷新部分:

LiquidPullToRefresh(
  onRefresh: () async {
    ref.refresh(userProfileProvider(uid));
  },
  child: ListView()
)
Run Code Online (Sandbox Code Playgroud)

对此有什么好的方法吗?

Muh*_*aid 10

这不再是问题,因为 Riverpod 2.0+ 具有新的刷新行为。现在,它在加载时返回先前的数据/错误值。

提供程序发出 AsyncValue.data 或 AsyncValue.error 后,该提供程序将不再发出 AsyncValue.loading。相反,它将重新发出最新值,但属性 AsyncValue.isRefreshing 为 true。

这允许 UI 在刷新提供程序时继续显示以前的数据/错误。

如果您希望在刷新数据时有选择地显示加载指示器或某些其他元素,您可以简单地查找 的布尔值AsyncValue.isRefreshing

来源