RiverPod2.6.1简易使用
Riverpod的定义:
Riverpod 是 Flutter/Dart 的反应式状态管理框架。
启用Riverpod方式:
在 pubspec.yaml 文件中添加 Riverpod 的依赖,如图所示:
在main.dart文件中,使用 ProviderScope 包裹整个应用,来启用 Riverpod,如图所示:
理解传统的Provider和Riverpod的Provider的区别 :
provider是小部件,通常在MultiProvider中配置(传统的 Provider 用法)
在 Riverpod 中,Provider 不再是小部件,而是普通的 Dart 对象,可以在任何地方定义,最终作为全局变量声明。
在 Riverpod 中,Provider 的实现如下:
传统的Provider使用BuildContext方式为:
Provider 是基于 InheritedWidget 封装的,读取状态需要 BuildContext,因此只能在 Widget 树中声明使用。
Provider 的定义如下:
Provider(…);
provider使用BuildContext读取方式为:
class Example extends StatelessWidget {
Widget build(BuildContext context) {
Model model = context.watch<Model>();
}
}
在Riverpod中,使用provider访问widgetRef方式为:
Riverpod中不是使用BuildContext来读取状态,而是使用WidgetRef读取状态。
final modelProvider= Provider<Model>(...)
class Example extends ConsumerWidget{
Widget build(BuildContext context, WidgetRef ref) {
Model model = ref.watch(modelProvider);
}
}
结论:传统的Provider 使用 StatelessWidget,而 Riverpod 使用 ConsumerWidget。
ConsumerWidget 与 StatelessWidget 的唯一区别是,它有一个额外的 WidgetRef 参数,能够访问和操作所有的 Provider。
传统的Provider和Riverpod 使用Consumer的区别:
Consumer用于在 Widget 树中读取并响应Provider状态的变化。
这是传统Provider使用Consumer的方式如下:
Provider<Model>(...);
Consumer<Model>(
buider:(BuildContext context,Model model,Widget? child){
}
)
在Riverpod中,使用Consumer访问provider的方式如下:
final modelProvider = Provider<Model>(...);
Consumer(
builder: (BuildContext context, WidgetRef ref, Widget? child) {
Model model = ref.watch(modelProvider);
}
)
结论:传统的Provider使用Counsumer是通过BuildContext获取状态。
Riverpod中provider使用Counsumer是通过widgetRef获取状态。
RiverPod中Provider的类型:
provider用于定义一个值,暴露给其他provider使用。
StateProvider用于暴露一个状态,可以是enum,String,boolean,number。
FutureProvider专门用于处理Future对象,可以自动处理异步操作的状态。
StateNotifierProvider是一个用于监听和暴露StateNotifier的提供者&#