Flutter 状态管理 🔥
嗨,读者朋友们!你们最近怎么样?今天我们要来学习一下 Flutter 中不同的状态管理方法,Flutter 里的状态管理方法真的很多。我们今天只介绍其中的一些。😚……锵锵!
什么是状态管理?
状态管理是指对图形用户界面中一个或多个用户界面控件(例如文本框、确定按钮、动画等)的状态进行管理。在这种用户界面编程技术中,一个用户界面控件的状态取决于其他用户界面控件的状态。
状态管理是一个复杂的话题。如果您觉得有些问题没有得到解答,或者本文中描述的方法不适用于您的用例,那么您的判断很可能是正确的😂。
为什么需要状态管理?
想象一下这样一个应用:它有两个独立的屏幕——商品目录和购物车(分别用“我的商品目录”和“我的购物车”组件表示)。它可以是一个购物应用,但你也可以想象一个简单的社交网络应用也采用同样的结构(把“商品目录”替换成“动态”,把“购物车”替换成“收藏夹”)。你需要追踪用户添加到购物车或收藏夹的商品、购物车中的总价以及其他许多信息……为了追踪所有这些事件,你需要使用某种状态管理方法来管理应用的状态。
如果你是从命令式框架(例如 Android SDK 或 iOS UIKit)转到 Flutter,那么你需要从新的角度思考应用程序开发。
你可能有的许多假设并不适用于 Flutter。例如,在 Flutter 中,你可以从头开始重建部分 UI,而不是修改现有 UI。Flutter 的速度足够快,即使需要,也可以在每一帧都进行重建。
Flutter 是声明式的。这意味着 Flutter 会根据应用程序的当前状态来构建用户界面:
当您的应用状态发生变化时(例如,用户在设置界面中切换开关),您会改变应用的状态,这会触发用户界面的重绘。这里不会强制更改用户界面本身(例如使用 widget.setText),您只是改变了应用的状态,用户界面会从头开始重建。
那么,Flutter 中有哪些不同的状态管理方法呢?
- 集团
一个可预测的状态管理库,有助于实现 BLoC(业务逻辑组件)设计模式。
这种设计模式有助于将表示层与业务逻辑分离。遵循 BLoC 模式可以提高代码的可测试性和可重用性。该库抽象了模式的响应式方面,使开发人员能够专注于编写业务逻辑。Bloc 让表示层与业务逻辑的分离变得轻松,从而使您的代码运行速度更快、更易于测试且更易于重用。
Bloc 的设计秉承三大核心价值观:
-
简单:易于理解,不同技能水平的开发人员均可使用。
-
功能强大:通过将应用程序拆分成更小的组件,帮助创建令人惊叹的复杂应用程序。
-
可测试性:轻松测试应用程序的各个方面,以便我们能够充满信心地进行迭代。
您可以通过flutter_bloc在 Flutter 中使用 Bloc。
2. Getx
一种简化的响应式状态管理解决方案。它快速、实用地结合了高性能状态管理、智能依赖注入和路由管理。
它建立在三个基本原则之上:
-
性能:注重最大限度地减少内存和资源消耗
-
生产力:直观高效的工具,结合简洁明了的语法,最终节省开发时间。
-
组织架构:将业务逻辑与视图和展示逻辑完全解耦,这已经是最佳方案了。您无需上下文即可在路由之间导航,也无需有状态组件。
3. 重制版
Redux 是一种单向数据流架构,可以帮助开发者轻松地开发和维护应用程序。
以下是 Redux 通常包含的 4 个组件:
-
操作:当生成事件时,它会被表示为一个操作,并被分发给 Reducer。
-
Reducer:当 Reducer 收到任何更新时,它会将接收到的新状态更新到 store 中。
-
商店:当商店收到任何更新时,它会通知视图。
-
查看:重新创建以显示所做的更改。
如何在 Flutter 中使用 Redux?
在使用 Redux 之前,您应该知道 flutter SDK 不支持 Redux,但可以通过使用flutter_redux插件来实现。
4. 提供者
Provider 由 Remi Rousselet 创建,旨在尽可能简洁地管理状态。在 Provider 中,组件会监听状态的变化,并在收到通知后立即更新。
您可以通过提供商使用提供商
5. 河畔荚
Riverpod 是一个响应式缓存和数据绑定框架,也是一个流行的 Flutter 状态管理库。它继承了 Provider 的诸多优点,并在此基础上带来了许多额外的优势。根据官方文档,Riverpod 完全重写了 Provider 包,实现了原本无法实现的改进。
Riverpod 也遵循 3 个基本原则:
-
使用最少的样板代码即可轻松创建、访问和组合提供商
-
编写可测试的代码,并将逻辑放在组件树之外。
-
在编译时而不是运行时捕获编程错误。
您可以通过riverpod使用 riverpod
6. MobX
MobX 是一个经过实战检验的库,它通过透明地应用函数式响应式编程 (TFRP) 来简化状态管理并使其可扩展。
MobX背后的理念很简单:
-
简单明了:编写简洁、无样板代码,直接表达你的意图。想要更新记录字段?使用经典的 JavaScript 赋值语句即可。需要在异步进程中更新数据?无需任何特殊工具,响应式系统会自动检测所有更改并将其传播到使用它们的地方。
-
轻松实现最佳渲染:运行时会跟踪数据的所有更改和使用情况,构建一个依赖树,捕获状态和输出之间的所有关系。这确保了依赖于状态的计算(例如 React 组件)仅在绝对必要时运行。无需使用容易出错且效果欠佳的技术(例如记忆化和选择器)手动优化组件。
-
架构自由:MobX 不预设任何架构,允许您在任何 UI 框架之外管理应用程序状态。这使得您的代码解耦、可移植,最重要的是,易于测试。
我更喜欢哪种状态管理方式?为什么?🤔
我偏好的状态管理方式是区块🔥 为什么?
-
Bloc 的模块化特性非常出色,而且文档也十分完善。此外,Bloc 还拥有许多扩展,例如 bloc_concurrency 和 hydrated_bloc 等,这些扩展使得缓存、告密和限流等操作变得轻松便捷。除此之外,Bloc 的错误处理机制也十分强大,你可以使用 BlocObserver 来捕获变更、事件或错误,然后只需在 BlocObserver 中集成 Crashlytics 或 Sentry 等工具,即可轻松实现日志记录。
-
我也在一个多人团队中使用过 Bloc,有趣的是,我们所有人都能在同一个代码库中无缝协作,遵循相同的模式和约定。🤗
-
总的来说,Bloc 试图通过规范状态变更的发生时间,并在整个应用程序中强制执行单一的状态变更方式,来使状态变更可预测。
以上仅列举部分,您可以在Flutter网站上找到更多信息。状态管理方案有很多,选择合适的方案可能是一项艰巨的任务。没有完美的状态管理方案!重要的是选择最适合您的团队和项目的方案。
锵锵!!!!
文章来源:https://dev.to/dmutoni/flutter-state-management-32n7



