状态管理方法列表
- 概览
- Provider
- Riverpod
- setState
- ValueNotifier & InheritedNotifier
- InheritedWidget & InheritedModel
- June
- Redux
- Fish-Redux
- BLoC / Rx
- GetIt
- MobX
- Dart Board
- Flutter 命令
- Binder
- GetX
- states_rebuilder
- Triple 模式(分段状态模式)
- solidart
- flutter_reactive_value
- Elementary
状态管理是一个复杂的话题。如果您觉得某些问题没有得到解答,或者这些页面上描述的方法不适用于您的用例,那您可能是对的。
在以下链接中了解更多信息,其中许多链接是由 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 Inherited Widgets,由 Eric Windmill 提供
- Widget - State - Context - InheritedWidget,由 Didier Bolelens 提供
June
#一个轻量级且现代的状态管理库,专注于提供类似于 Flutter 内置状态管理的模式。
Redux
#一种状态容器方法,许多 Web 开发人员都熟悉。
- 使用 Redux 和 Flutter 进行动画管理,来自 DartConf 2018 的视频 Medium 上的配套文章
- Flutter Redux 包
- Redux Saga 中间件 Dart 和 Flutter,由 Bilal Uslu 提供
- Flutter 中的 Redux 简介,由 Xavi Rigau 提供
- Flutter + Redux — 如何制作购物清单应用,由 Paulina Szklarska 在 Hackernoon 上发布
- 使用 Redux 在 Flutter 中构建 TODO 应用程序(CRUD)— 第 1 部分,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 动画工作室,由 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
补充为完整状态管理解决方案的混合类。 - GetIt Hooks 包,如果您已经使用
flutter_hooks
,则与混合类相同。 - Flutter 最简状态管理,由 Suragch 提供
MobX
#一个基于可观察对象和反应的流行库。
- MobX.dart,为您的 Dart 和 Flutter 应用提供轻松无忧的状态管理
- MobX.dart 入门
- Flutter:使用 Mobx 进行状态管理,Paul Halliday 发布的视频
Dart Board
#一个用于 Flutter 的模块化功能管理框架。Dart Board 旨在帮助封装和隔离功能,包括示例/框架、小型内核以及许多现成的解耦功能,例如调试、日志记录、身份验证、redux、定位器、粒子系统等等。
Flutter 命令
#使用命令模式并基于 ValueNotifiers
的反应式状态管理。最适合与 GetIt 结合使用,但也可以与 Provider
或其他定位器一起使用。
- Flutter 命令包
- RxCommand 包,基于
Stream
的实现。
Binder
#一个以 InheritedWidget
为核心的状态管理包。部分灵感来自 recoil。此包促进了关注点分离。
- Binder 包
- Binder 示例
- Binder 代码片段,vscode 代码片段,让您在使用 Binder 时更高效。
GetX
#一个简化的反应式状态管理解决方案。
- GetX 包
- GetX Flutter Firebase Auth 示例,由 Jeff McMorris 提供
states_rebuilder
#一种将状态管理与依赖注入解决方案和集成路由器相结合的方法。有关更多信息,请参阅以下信息
Triple 模式(分段状态模式)
#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
就会重建。
flutter_reactive_value
源代码和文档
Elementary
#Elementary 是一种简单可靠的方法,用于使用 Flutter 中的 MVVM 构建应用程序。它提供了纯 Flutter 体验,具有清晰的职责代码分离、高效的重建、易于测试以及提高团队生产力等优势。
除非另有说明,否则本网站上的文档反映了 Flutter 的最新稳定版本。页面最后更新于 2024-11-17。 查看源代码 或 报告问题.