状态管理方法列表
状态管理是一个复杂的话题。如果你觉得有些问题没有得到解答,或者这些页面上描述的方法不适用于你的用例,你可能是对的。
通过以下链接了解更多信息,其中许多链接都是由 Flutter 社区贡献的
概述
#选择方法前需要回顾的内容。
- 状态管理简介,这是本节的开篇(适用于直接访问此选项页面而错过之前页面的读者)
- Flutter 中的实用状态管理,Google I/O 2019 的视频
- Flutter 架构示例,作者 Brian Egan
Provider
#- 简单的应用状态管理,本节的上一页
- Provider 包
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 继承小部件,作者 Eric Windmill
- Widget - State - Context - InheritedWidget,作者 Didier Bolelens
June
#一个轻量级、现代化的状态管理库,专注于提供与 Flutter 内置状态管理类似的模式。
Redux
#一种许多 Web 开发者熟悉的状态容器方法。
- 使用 Redux 和 Flutter 进行动画管理,DartConf 2018 的视频 Medium 上的配套文章
- Flutter Redux 包
- Redux Saga Middleware Dart 和 Flutter,作者 Bilal Uslu
- Flutter 中的 Redux 简介,作者 Xavi Rigau
- Flutter + Redux——如何制作一个购物清单应用,Paulina Szklarska 在 Hackernoon 上发表
- 使用 Redux 在 Flutter 中构建待办事项应用 (CRUD)——第一部分,Tensor Programming 的视频
- Flutter Redux Thunk,一个示例,作者 Jack Wong
- 使用 Redux 构建(大型)Flutter 应用,作者 Hillel Coren
- Fish-Redux——一个基于 Redux 的组合式 Flutter 应用框架,作者阿里巴巴
- Async Redux——无需样板的 Redux。支持同步和异步 reducer,作者 Marcelo Glasberg
- Flutter 遇上 Redux:Redux 管理 Flutter 应用程序状态的方式,作者 Amir Ghezelbash
- Redux 和 epics 让 Flutter 应用代码组织得更好,作者 Nihad Delic
- Flutter_Redux_Gen - 用于生成样板代码的 VS Code 插件,作者 Balamurugan Muthusamy (BalaDhruv)
- Flutter Animations Studio,作者 Gianluca Romeo
Fish-Redux
#Fish Redux 是一个基于 Redux 状态管理的组合式 Flutter 应用框架。它适用于构建中大型应用。
- Fish-Redux-Library 包,作者阿里巴巴
- 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
完善为完整状态管理解决方案的 Mixin。 - GetIt Hooks 包,与 Mixin 相同,以防你已使用
flutter_hooks
。 - 极简主义者的 Flutter 状态管理,作者 Suragch
MobX
#一个基于可观测对象和反应的流行库。
Dart Board
#一个用于 Flutter 的模块化特性管理框架。Dart Board 旨在帮助封装和隔离特性,包括示例/框架、小型内核以及许多即用型解耦特性,如调试、日志记录、身份验证、redux、定位器、粒子系统等。
Flutter Commands
#使用命令模式并基于 ValueNotifiers
的响应式状态管理。最适合与 GetIt 结合使用,但也可以与 Provider
或其他定位器一起使用。
- Flutter Command 包
- RxCommand 包,基于
Stream
的实现。
Binder
#一个以 InheritedWidget
为核心的状态管理包。部分灵感来源于 Recoil。该包提倡关注点分离。
- Binder 包
- Binder 示例
- Binder 代码片段,vscode 代码片段,让 Binder 的开发效率更高
GetX
#一个简化的响应式状态管理解决方案。
- GetX 包
- GetX Flutter Firebase Auth 示例,作者 Jeff McMorris
states_rebuilder
#一种将状态管理与依赖注入解决方案和集成路由器相结合的方法。更多信息请参阅以下内容
Triple Pattern(分段状态模式)
#Triple 是一种使用 Streams
或 ValueNotifier
进行状态管理的模式。这种机制(因流始终使用三个值:Error
、Loading
和 State
而被称为triple)基于分段状态模式。
更多信息请参考以下资源
- 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
会重建。
flutter_reactive_value
源代码和文档
Elementary
#Elementary 是一种在 Flutter 中使用 MVVM 构建应用程序的简单可靠方式。它提供纯粹的 Flutter 体验,具有清晰的代码职责分离、高效的重建、易于测试以及提高团队生产力等优点。