Riverpod 条件提供程序状态更新

Posted

技术标签:

【中文标题】Riverpod 条件提供程序状态更新【英文标题】:riverpod conditional provider state updates 【发布时间】:2021-02-25 11:42:14 【问题描述】:

我正在将我的应用程序移植到river_pod,到目前为止一切都很好,但我总是偶然发现同样的问题。在某些情况下,我需要提供者仅根据ref.watch 获取的新值有条件地更新其状态。

这方面的一个例子是我的最后一个障碍:

我有一个公开当前用户位置的 ChangeNotifier 提供程序。此提供程序由多个其他提供程序侦听。其中之一是 FutureProvider,它会在每次位置更改时获取附近的热门帖子。这里的问题是这个位置更新非常频繁(每 10 秒左右),所以这个获取完成的时间非常不必要。

在这种情况下,我想做的是,在这个 FutureProvider 中,能够获得新位置,但只能有条件地更新(这里的条件是,如果最后一次提取是在 1 公里以外完成的)以避免这种不必要的网络调用以及它导致的所有底层 UI 更新。

这意味着两件事,可以访问最后一个状态进行比较,并且能够取消更新(因为即使我不执行获取并返回最后一个值,UI 仍然会读取作为更新)。

我知道这些机制不是内置的,所以我想知道,river_pod 是解决这个问题的方法吗?

干杯!

【问题讨论】:

【参考方案1】:

我有同样的问题要解决。我必须比较旧数据和新数据,并且只有在发生更改时才更改提供程序中的状态。

【讨论】:

以上是关于Riverpod 条件提供程序状态更新的主要内容,如果未能解决你的问题,请参考以下文章

Riverpod : initState 方法中的访问提供程序

如何在不传递参数的情况下使用riverpod 系列提供程序

Riverpod,在 BuildContext 和 Provider 之外读取状态

Flutter状态管理之Riverpod 2.0

Flutter状态管理之Riverpod 2.0

Flutter状态管理之Riverpod 2.0