Riverpod ref.watch(statenotifierprovider) vs ref.watch(statenotifierprovider.notifier)

FRA*_*NAD 6 dart flutter riverpod flutter-riverpod

StateNotifierPovider我一直在试图找出观察对象与观察它所暴露的通知程序之间的区别。正如我们在文档中看到的,当状态更改时,观察通知程序对象不会触发对象的构建方法。经过实验,看起来观察提供者对象就像会暴露通知程序中的状态一样ref.read(provider.notifier).state。我无法真正理解直接监视提供程序与监视提供程序之间的区别provider.notifier以及为什么它在监视通知程序并更改其状态时不触发构建方法。

Rém*_*let 15

的文档.notifier希望

\n
\n

获取与此提供程序关联的 StateNotifier,\n而不侦听状态更改。

\n

这通常用于调用 StateNotifier 上的方法。例如\n:

\n
Button(\n onTap: () => ref.read(stateNotifierProvider.notifer).increment(),\n)\n
Run Code Online (Sandbox Code Playgroud)\n

如果 StateNotifier\instance 发生更改,此可监听对象将通知其通知程序。如果刷新提供程序或其依赖项之一\n发生更改,则可能会发生这种情况。

\n
\n

https://pub.dev/documentation/riverpod/latest/riverpod/AutoDisposeStateNotifierProvider/notifier.html

\n

所以ref.watch(provider)监听状态变化。

\n

并且ref.watch(provider.notifier)只获取通知者但不监听状态变化。相反,它会侦听何时StateNotifier重新创建实例 \xe2\x80\x93 例如ref.refresh(provider),如果您这样做了,这将重新创建StateNotifier

\n