我一直试图找出观察StateNotifierPovider对象与观察它所公开的通知程序之间的区别。正如我们在文档的下一节中所看到的,观察通知程序对象并不会在状态改变时触发对象的build方法。经过实验,看起来就像监视提供程序对象公开了通知程序中的状态,就像ref.read(provider.notifier).state那样。I don“我真的不明白直接监视提供程序与provider.notifier之间的区别,以及为什么在监视通知程序并更改其状态时不触发build方法。
StateNotifierPovider
ref.read(provider.notifier)
provider.notifier
46qrfjad1#
希望.notifier的文档能够对此进行说明:获取与此提供程序关联的StateNotifier,而不侦听状态更改。这通常用于调用StateNotifier上的方法。例如:
.notifier
Button( onTap: () => ref.read(stateNotifierProvider.notifer).increment(), )
如果StateNotifier示例发生更改,此listenable将通知其通告程序。如果提供程序被刷新或其依赖项之一发生更改,则可能发生这种情况。https://pub.dev/documentation/riverpod/latest/riverpod/AutoDisposeStateNotifierProvider/notifier.html因此,ref.watch(provider)侦听状态更改。ref.watch(provider.notifier)只获取通知程序,但不监听状态更改,而是监听StateNotifier示例的重新创建时间--例如,如果执行ref.refresh(provider),则将重新创建StateNotifier
ref.watch(provider)
ref.watch(provider.notifier)
StateNotifier
ref.refresh(provider)
1条答案
按热度按时间46qrfjad1#
希望
.notifier
的文档能够对此进行说明:获取与此提供程序关联的StateNotifier,而不侦听状态更改。
这通常用于调用StateNotifier上的方法。例如:
如果StateNotifier示例发生更改,此listenable将通知其通告程序。如果提供程序被刷新或其依赖项之一发生更改,则可能发生这种情况。
https://pub.dev/documentation/riverpod/latest/riverpod/AutoDisposeStateNotifierProvider/notifier.html
因此,
ref.watch(provider)
侦听状态更改。ref.watch(provider.notifier)
只获取通知程序,但不监听状态更改,而是监听StateNotifier
示例的重新创建时间--例如,如果执行ref.refresh(provider)
,则将重新创建StateNotifier