Riverpod 作为 Provider 的「升级版」,除了保留了部分 Provider 的使用方式(比如 Consumer),其它看起来很不一样,如果继续用 Provider 的使用思路,会使用的不伦不类。

Provider 的分类

没错,Rivderpod 中依旧继续使用 Provider 的概念。但是发生了一些变化,比较常用的有如下几个类型:

  • Provider
  • StateProvider
  • StateNotifierProvider
  • FutureProivder/StreamProivder
  • ChangeNotifierProvider

在「Provider」框架中,我们通常使用 ChangeNotifierProvider,而在 Rivderpod 中,我们应该尽量避免使用它。在 Rivderpod 中,provider 一般是 final 的,通常状态也希望是不可变的,而 ChangeNotifierProvider 破坏了这个概念,其它 provider 则遵循了单一状态的原则,可以变的只有「状态」的值。

该怎么选择 Provider

一般来说,如果你要存的数据类型比较简单,用 StateProvider 就够了,复杂的可以用 StateNotifierProviderStateNotifierProvider 允许你自定义一个 StateNotifier

Provider 通常用于和其它类型的 Provider 联动,因为它可以缓存内容,直到数据真正发生了变化。

FutureProivder/StreamProivder 有点像 FutureBuilder 这种东西,它的构造参数是 async 的,所以,你可以单独使用,也可以和其它 Provider 联动,不过,一般它们的使用频率不会太高(其它方式可以替代)

ChangeNotifierProvider能不用就不用,除非上面的 Provider 都解决不了你的问题。