状态管理方法列表
状态管理是一个复杂的话题。如果你觉得你的某些问题没有得到解答,或者这些页面中描述的方法不适用于你的用例,你可能是对的。
在以下链接中了解更多信息,其中许多信息是由 Flutter 社区提供的
概览
在选择方法之前需要查看的内容。
- 状态管理简介,这是本节的开头(对于那些直接到达此选项页面而错过了前几页的人)
- Flutter 中的实用状态管理,Google I/O 2019 的视频
- Flutter 架构示例,作者:Brian Egan
提供者
Riverpod
Riverpod 的工作方式与 Provider 类似。它提供编译安全性并进行测试,而无需依赖 Flutter SDK。
setState
用于特定于小部件的短暂状态的低级方法。
- 为你的 Flutter 应用添加交互性,Flutter 教程
- Google Flutter 中的基本状态管理,作者 Agung Surya
ValueNotifier 和 InheritedNotifier
仅使用 Flutter 提供的工具来更新状态并通知 UI 更改的方法。
- 使用 ValueNotifier 和 InheritedNotifier 进行状态管理,作者 Tadas Petra
InheritedWidget 和 InheritedModel
在小组件树中祖先和小组件之间进行通信所使用的底层方法。这是 provider
和许多其他方法在底层使用的方法。
以下由讲师指导的视频讲习班介绍了如何使用 InheritedWidget
其他有用的文档包括
- InheritedWidget 文档
- 使用 InheritedWidgets 管理 Flutter 应用程序状态,作者 Hans Muller
- 继承小组件,作者 Mehmet Fidanboylu
- 有效使用 Flutter Inherited Widgets,作者 Eric Windmill
- 小组件 - 状态 - 上下文 - InheritedWidget,作者 Didier Bolelens
六月
一个轻量级且现代的状态管理库,专注于提供与 Flutter 内置状态管理类似的模式。
Redux
许多 Web 开发人员都熟悉的状态容器方法。
- 使用 Redux 和 Flutter 进行动画管理,DartConf 2018 的视频 Medium 上的配套文章
- Flutter Redux 包
- Redux Saga 中间件 Dart 和 Flutter,作者 Bilal Uslu
- Flutter 中的 Redux 简介,作者 Xavi Rigau
- Flutter + Redux - 如何制作购物清单应用程序,Hackernoon 上的 Paulina Szklarska
- Tensor Programming 制作的视频,在 Flutter 中使用 Redux 构建 TODO 应用程序 (CRUD)——第 1 部分
- Flutter Redux Thunk,一个示例,作者 Jack Wong
- 使用 Redux 构建一个(大型)Flutter 应用程序,作者 Hillel Coren
- Fish-Redux——基于 Redux 的 Flutter 应用程序框架,作者 Alibaba
- Async Redux——无需样板的 Redux。允许同步和异步 reducer,作者 Marcelo Glasberg
- Flutter 遇见 Redux:管理 Flutter 应用程序状态的 Redux 方式,作者 Amir Ghezelbash
- Redux 和 epics,用于在 Flutter 应用程序中更好地组织代码,作者 Nihad Delic
- Flutter_Redux_Gen - VS Code 插件,用于生成样板代码,作者 Balamurugan Muthusamy (BalaDhruv)
Fish-Redux
Fish Redux 是一个基于 Redux 状态管理的 Flutter 应用程序框架。它适用于构建中大型应用程序。
- Fish-Redux-Library 包,作者 Alibaba
- Fish-Redux-Source,项目代码
- Flutter-Movie,一个非平凡的示例,演示如何使用 Fish Redux,其中包含 30 多个屏幕、graphql、支付 API 和媒体播放器。
BLoC / Rx
基于流/可观察模式的一系列模式。
- 使用 BLoC 模式构建你的 Flutter 项目,作者 Sagar Suri
- BloC 库,作者 Felix Angelov
- 响应式编程 - 流 - BLoC - 实用用例,作者 Didier Boelens
GetIt
一种基于服务定位器的状态管理方法,不需要 BuildContext
。
- GetIt 包,服务定位器。它还可以与 BloC 一起使用。
-
GetIt Mixin 包,一个将
GetIt
完善为一个完整的状态管理解决方案的混合包。 -
GetIt Hooks 包,与混合包相同,但适用于已经使用
flutter_hooks
的情况。 - 面向极简主义者的 Flutter 状态管理,作者 Suragch
MobX
一个基于可观察对象和反应的流行库。
- MobX.dart,为你的 Dart 和 Flutter 应用程序提供轻松的状态管理
- MobX.dart 入门
- Flutter:使用 Mobx 进行状态管理,Paul Halliday 制作的视频
Flutter Commands
响应式状态管理,它使用命令模式并基于 ValueNotifiers
。最适合与 GetIt 结合使用,但也可以与 Provider
或其他定位器一起使用。
- Flutter Command 包
-
RxCommand 包,基于
Stream
的实现。
Binder
一个状态管理包,其核心使用 InheritedWidget
。部分灵感来自 recoil。此包促进了关注点的分离。
- Binder 包
- Binder 示例
- Binder 代码段,vscode 代码段,可让 Binder 变得更加高效
GetX
一个简化的响应式状态管理解决方案。
- GetX 包
- GetX Flutter Firebase 身份验证示例,作者 Jeff McMorris
states_rebuilder
一种将状态管理与依赖注入解决方案和集成路由器相结合的方法。有关更多信息,请参阅以下信息
三重模式(分段状态模式)
Triple 是一种状态管理模式,它使用 Streams
或 ValueNotifier
。此机制(昵称“triple”,因为流始终使用三个值:Error
、Loading
和 State
)基于 分段状态模式。
有关更多信息,请参阅以下资源
- Triple 文档
- Flutter Triple 包
- Triple 模式:Flutter 中的一种新的状态管理模式(一篇用葡萄牙语撰写的博客文章,但可以自动翻译)
- 视频:Kevlin Ossada 讲解 Flutter Triple 模式(以英语录制)
solidart
一个简单但功能强大的状态管理解决方案,灵感来自 SolidJS。
flutter_reactive_value
flutter_reactive_value
库可能是 Flutter 中最简单的状态管理解决方案。对于 Flutter 新手来说,它可能有助于为其 UI 添加响应性,而无需之前描述的机制的复杂性。flutter_reactive_value
库定义了 ValueNotifier
上的 reactiveValue(BuildContext)
扩展方法。此扩展允许 Widget
获取 ValueNotifier
的当前值,并将 Widget
订阅到 ValueNotifier
的值更改。如果 ValueNotifier
的值发生更改,则 Widget
将重新生成。