使用Riverpod在Flutter中实现下拉刷新

9

我是Riverpod的新手,正在尝试在我的Flutter应用程序中使用Riverpod实现下拉刷新,但似乎找不到任何好的在线教程。有人在使用Riverpod时在他们的Flutter应用程序中实现了下拉刷新吗?我已经到处寻找教程,但大多数都是在应用程序加载时进行简单的网络请求。提前感谢!

使用以下依赖项进行Riverpod和网络请求。 flutter_riverpod: ^0.12.1 dio: ^3.0.10

3个回答

15

在刷新操作中,您可以使用context.refresh(yourProvider)。非常好用。

在Riverpod 1.0.0及以上版本中,您可以使用ref.refresh(yourProvider)


只是稍微澄清一下: 在 riverpod 1.0.0 中,您应该使用 ref.refresh(yourFutureProvider.future),因为 .refresh() 需要 ProviderBase<Future<void>> 参数类型。 - IVL
1
实际上不是这样的:如果你在 final yourFutureProvider = FutureProvider<T>(....) 中指定了 <T>,那么如果你调用 ref.refresh(yourFutureProvider.future),它不会重新调用 future,除非你使用状态通知器。相反,如果你在定义 provider 时没有指定 <T>,你可以使用 ref.refresh(yourFutureProvider) 来调用刷新。 - selan
以下是使用最新版本的Riverpod的示例: .refresh(upComingMoviesStateNotifierProvider.notifier) .getNextUpcomingMoviesPage()``` - Boris Kamtou
在Riverpod 2中,推荐使用ref.invalidate,因为它们不会在计算阶段“堆积”...只有一个重建将被触发,如果有任何人在观察,否则不会触发。 - Randal Schwartz

4

事实证明,使用Riverpod (^1.0.0) 实现下拉刷新 UI 的 工作原理 如下:

提供程序:

final yourFutureProvider = FutureProvider<T>(....);

在 Build 方法内部:

                  return RefreshIndicator(
                    onRefresh: () async {
                      return await ref.refresh(yourFutureProvider);
                    },

1

这对我有用

Declare the provider

final sessionsProvider = FutureProvider<List<Session>>((ref) async {
  final sessionServices = ref.read(sessionsServiesProvider);
  return await sessionServices.getSessions();
});

add refresh indicator

RefreshIndicator(
        onRefresh: () async => ref.refresh(sessionsProvider),
        child: ...)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接