1 为什么用Riverpod?
Riverpod是什么?
Riverpod(Provider的字谜)是用于Flutter/Dart的一种反应式缓存框架。
通过使用声明性和反应式编程,Riverpod能够为您的应用程序处理大部分逻辑。它可以执行带有内置错误处理和缓存的网络请求,并在必要时自动重新获取数据。
动机:
现代应用程序很少随着渲染其用户界面所需的所有信息而来。相反,数据通常是从服务器异步获取的。
问题在于,处理异步代码是困难的。虽然Flutter提供了一些方法来创建状态变量并在更改时刷新UI,但仍然相当有限。仍然存在许多未解决的挑战:
异步请求需要在本地进行缓存,因为每当UI更新时重新执行它们是不合理的。
由于我们有一个缓存,如果不小心处理,我们的缓存可能会变得过时。
我们还需要处理错误和加载状态。
在大规模情况下解决这些问题可能会很困难,并且它们受到许多功能的影响,例如:
下拉刷新
无限列表/滚动获取
边输入边搜索
防抖动的异步请求
在不再使用时取消异步请求
乐观的UI
离线模式
这些功能可能很难实现,但对于良好的用户体验至关重要。
然而,很少有软件包直接尝试解决这些问题,很多工作必须手动完成。
这就是Riverpod的用武之地。
Riverpod尝试通过提供一种受到Flutter小部件启发的全新的编写业务逻辑的方式来解决这些问题。在许多方面,Riverpod类似于小部件,但用于状态管理。
通过使用这种新方法,这些复杂的功能大部分都是默认完成的。剩下的就是专注于您的用户界面。
持怀疑态度吗?以下是一个示例。以下代码片段是使用Riverpod实现的Pub.dev客户端应用程序的简化版本。
代码链接:
https://github.com/rrousselGit/riverpod/blob/master/examples/pub/lib/search.dart#L19
这个代码片段包含了您需要的所有业务逻辑,用于实现"边输入边搜索"、"下拉刷新"和"无限列表",同时处理错误和加载状态。
2 开始:
在深入了解Riverpod的内部机制之前,让我们从基础开始:安装Riverpod,然后编写一个"Hello World"示例。
需要安装的插件包说明:
在开始之前,您需要知道Riverpod分布在多个包中,其使用方式略有不同。您想要安装的Riverpod变体取决于您正在制作的应用程序。您可以参考以下表格,以帮助您决定使用哪个包:
插件包截图
安装riverpod插件
在pubspec.yaml安装这个插件包:
安装插件包
执行dart pub get命令,这样插件riverpod插件包就安装到程序上了
写一个helloworld例子:
程序截图
日志截图
网友评论