## 前言Riverpod 是 Flutter 下知名度较高的状态管理依赖,同样出自 Provider 的开发者 rrousselGit 之手。 其实仔细去看 Riverpod 似乎只是 Provider 的拼写打乱了顺序,其提供了更简洁的API 设计,实现了依赖注入。 如果去看过 rrousselGit 的主页,你可以发现,他也是著名的 Flutter_hooks 的作者,RiverPod 也理所当然的拥有 hook 相关的血统 > `HookConsumerWidget 先添加如下依赖 (这里使用 Flutter_hooks 举例)```yamldependencies: flutter_hooks: ^0.20.5 hooks_riverpod: ^2.5.1 riverpod_annotation /riverpod_annotation.dart';part 'counter_provider.g.dart';@Riverpod(keepAlive: true)class Counter extends
要告诉Riverpod当它不再被使用时销毁一个Provider的状态,只需将.autoDispose附加到你的Provider上即可。 ❝这个其实在前面的例子中已经讲到了,ref是可以连接多个不同的Provider的,这是Riverpod非常灵活的一个体现。 当使用watch时,Riverpod能够检测到被监听的值发生了变化,并将在需要时自动重新执行Provider的创建回调。 这对计算的状态很有用。 通过这三篇文章,相信大家已经能熟练的对Riverpod进行使用了,相比package:Provider,Riverpod的使用更加简单和灵活,这也是我推荐它的一个非常重要的原因,在入门之后,大家可以根据文档中作者提供的示例来进行学习 ,充分的了解Riverpod在实战中的使用技巧。
3、为什么选择 Riverpod 究其原因,还是 Riverpod 的一些主要特点比较给力,与我们的需求契合,且听我慢慢道来…… 不可变性。 Riverpod 官方文档 https://docs-v2.riverpod.dev/zh-hans/ Riverpod 提供的几种 Provider 二、官方示例 1、安装 flutter pub add flutter_riverpod dev:custom_lint dev:riverpod_lint riverpod_annotation dev:build_runner dev:riverpod_generator 使用Riverpod时,代码生成是完全可选的。 当然你也完全可以不使用。 与此同时,Riverpod支持代码生成,且推荐你使用它。 在Riverpod中编写的代码支持 有状态热重载。 更好地调试,通过生成额外的元数据然后用调试器调试。 Riverpod的一些功能将只支持代码生成。
大家可以先把官方文档看一看 https://riverpod.dev ,看完之后发现还是一脸懵逼,那就对了,Riverpod和Provider一样,有很多类型的Provider,分别用于不同的场景,所以 import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; // 但是Riverpod提供了多种解决方案来从widget中获得这个参数。 每当用户改变时,Riverpod将调用这个函数并比较之前和新的结果。如果它们是不同的(例如当名字改变时),Riverpod将重建Widget。 ❞ 这些是对Riverpod的最基本了解,但是却是很重要的部分,特别是如何对状态值进行读取,这是我们用好Riverpod的核心。
三、Riverpod —— 新一代的状态管理解决方案1. Riverpod 是什么? Riverpod 的优势无依赖上下文:Riverpod 不再依赖于 BuildContext,可以在任何位置读取和监听状态。提高类型安全性:通过更加充分地利用 Dart 的类型系统,减少运行时错误。 四、在 Flutter 中使用 Riverpod 管理 UI 状态接下来,我们将通过一个示例来展示如何在 Flutter 中使用 Riverpod 进行 UI 状态管理。1. 添加依赖首先,在 pubspec.yaml 文件中添加 Riverpod 依赖:dependencies: flutter: sdk: flutter flutter_riverpod: ^2.1.3 对于中大型项目,Riverpod 是一个值得考虑的优秀选择。
Riverpod: Riverpod是Provider的升级版,提供了更加强大和灵活的功能,支持异步数据和延迟加载等特性。 Riverpod状态管理器 介绍Riverpod状态管理器的基本概念 Riverpod是Flutter中的一种状态管理库,它是Provider的升级版,提供了更强大和灵活的功能。 在Flutter应用中集成Riverpod 要在Flutter应用中使用Riverpod状态管理器,首先需要在项目的pubspec.yaml文件中添加riverpod库的依赖: dependencies : flutter: sdk: flutter riverpod: ^1.0.0 然后,在Flutter应用的顶层Widget中初始化Riverpod,通常是在main.dart文件中的 如何使用Riverpod实现全局导航栏效果 要使用Riverpod实现全局导航栏效果,首先需要创建一个Provider来管理导航栏的状态,然后在需要使用导航栏的页面中使用Consumer来订阅导航栏状态
MyApp(), ), ); } 说明: ProviderScope 是 Riverpod 的上下文提供者,必须包裹整个应用。 3. lib/providers/counter_provider.dart —— 持久化计数器 import 'package:flutter_riverpod/flutter_riverpod.dart /flutter_riverpod.dart'; import '.. 5. lib/app.dart —— 使用 Riverpod 主题 import 'package:flutter/material.dart'; import 'package:flutter_riverpod :flutter_riverpod/flutter_riverpod.dart'; import '..
本文旨在介绍在2021年值得使用的 Flutter 数据流管理方案,除了大家都比较熟悉的 InheritedWidget 和 provider, 还有 Remi Rousselet 新推出的、令人十分期待的 Riverpod ,虽然 riverpod 目前尚未达到一个稳定版本,但它不仅继承了 provider 的使用宗旨,还解决了以上的三个问题,使其与 flutter 独立,是2021年最值得期待的数据管理方案了。 Riverpod Riverpod 的口号是:provider but different。可以先在官网大致了解下它的设计初衷与使用。 4.1 使用 4.1.1 state 存放在哪里? 需要在运行时才能发现是否可获取状态 Riverpod 1. provider 原作者开发,解决了 provider 的三个缺点2. 目前还属于 beta 版本 Riverpod 相当于是另外一个版本的 provider,但又集成了其他优点,是2021年最值得期待的数据管理方案了,如果你正在开始一个新项目的话,建议不妨试下 Riverpod
suragch.medium.com/relative-vs-package-imports-in-flutter-and-dart-1940699f70c8 Flutter state management with Riverpod 像我们演示了使用 Riverpod 进行状态管理的解决方案。 教程地址:https://itnext.io/flutter-state-management-with-riverpod-ef8d4ef77392 视频 Structure & Save User Data
、AOT/JIT、Flutter Engine 渲染管线(Layout/Layer/Compositor/Skia)与平台通道机制;二是工程实践,聚焦模块化路由、状态管理(Provider/Bloc/Riverpod 状态管理对比与选型3.1 三者对比表(Provider/Bloc/Riverpod)维度ProviderBloc/CubitRiverpod学习曲线低中-高中模式约束弱(灵活)强(事件-状态)适中(声明式依赖 ——项目守则3.2 Riverpod 最简示例意图:解耦依赖、良好可测试性、避免 InheritedWidget 嵌套。 // pubspec.yaml: flutter_riverpod: ^2.ximport 'package:flutter/material.dart';import 'package:flutter_riverpod /flutter_riverpod.dart';final counterProvider = StateProvider<int>((_) => 0);void main() => runApp(const
Riverpod Riverpod是Provider库的改进版,提供了更 好的依赖管理和更简洁的语法。 参考资料 要深入了解Dart语言和Flutter中的状态管理,可以参考以下官方资源和文档: Flutter状态管理介绍 Provider官方文档 Riverpod官方文档 GetX官方文档 BLoC官方文档
扩展提示:未来若使用 Riverpod,只需在此处改为: runApp(ProviderScope(child: MyApp())); 四、根组件:app.dart class MyApp extends 扩展路径: 将 isDarkMode 改为从 SharedPreferences 读取; 通过状态管理(如 Riverpod)监听用户切换操作,动态更新 themeMode。 测试 九、未来扩展路线图(2.0+ 升级建议) 功能 实现方式 状态管理 在 main.dart 包裹 ProviderScope,创建 counterProvider(Riverpod) 深色模式切换
状态管理:Riverpod 库名: flutter_riverpod 描述: 一个提供编译时安全、测试友好和易于组合的状态管理库。 选择理由: Riverpod 是 Provider 的升级版,提供更好的性能和灵活性,但是说哪个更好,其实不能一概而论,毕竟不同的人会有不同的编码习惯,当然这里可以设计得灵活一些,具体全局状态管理可以替换 @riverpod Future<String> boredSuggestion(BoredSuggestionRef ref) async { final response = await http.get
2.2 常见的状态管理方案:setState、Provider、GetX、Riverpod 等在 Flutter 中,有许多不同的状态管理方案可供选择,每种方案都有其自己的特点和适用场景:setState Riverpod:Riverpod 是一个基于 Provider 的新一代状态管理库,它引入了更强大的依赖注入和异步操作支持。它具有类型安全、易于测试、灵活性高等特点,适用于复杂的大型应用程序。 4.3 使用 Riverpod 实现 ViewModelRiverpod 是一个基于 Provider 的新一代状态管理库,它引入了更强大的依赖注入和异步操作支持。 使用 Riverpod 实现 ViewModel 的步骤如下:创建 ViewModel 类:编写一个普通的 Dart 类,定义视图状态和业务逻辑。
四、状态管理集成1.基于Riverpod的网络状态管理展开代码语言:DartAI代码解释//network_providers.dartfinaldioClientProvider=Provider<DioClient finaluserRepository=ref.watch(userRepositoryProvider);returnUsersNotifier(userRepository);});详细说明:依赖注入与Riverpod 的优雅结合Riverpod提供了强大的依赖注入机制,上述代码使用Provider和StateNotifierProvider实现了分层解耦:dioClientProvider:提供全局Dio实例。 兼容Riverpod:StateNotifier要求状态不可变。isLoading控制加载指示器,error显示错误信息,hasReachedMax用于判断是否已加载全部数据(支持分页加载)。 flutter_riverpod:现代状态管理方案,支持Provider注入。json_serializable:自动化JSON序列化,减少样板代码。
目标 #2: 通过 Riverpod实现页面切换 我们需要通过菜单来切换页面,所以我们使用 Riverpod package来实现全局的应用状态管理,当然我们也可以使用其他的状态管理。 Widget tree (省略了SizedBox and Expanded widgets ) Widget tree (手机版) (省略了SizedBox and Expanded widgets ) Riverpod 我们这里使用riverpod,在 pubspec.yaml引入: dependencies: flutter: sdk: flutter flutter_riverpod: 1.0.0-
Riverpod中的rebuild控制思路如果你使用Riverpod,本质思路是一样的。
我用 Riverpod 的 StateNotifier 做状态,Dio 走网络,示意代码如下(简化了异常与重试): // lib/features/ai/services/image_service.dart lib/features/canvas/state/canvas_state.dart import 'package:flutter/material.dart'; import 'package:riverpod /riverpod.dart'; class DrawingPoint { final double x, y; const DrawingPoint(this.x, this.y); } presentation/widgets/image_generate_panel.dart import 'package:flutter/material.dart'; import 'package:flutter_riverpod /flutter_riverpod.dart'; import '../..
WeatherRepository>( () => HttpWeatherRepository(api: OpenWeatherMapAPI(), client: http.Client(), ); 或者也可使用Riverpod import 'package:flutter_riverpod/flutter_riverpod.dart'; final weatherRepositoryProvider = Provider
oh_plugins/ # 自研鸿蒙插件 优势:按需下载,减少安装包体积 发布:在 AppGallery Connect 上传多个 HAP,系统自动分发 4.2 统一状态管理方案 推荐 Riverpod 附录:参考资源 OpenHarmony 分布式开发指南 Flutter Riverpod 官方文档 示例项目:super_travel_demo