[译] 极简主义者的 Flutter 状态管理(一)
原地址:https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1
Flutter 对我来说最大的挑战就是学习状态管理。人们都在讨论什么 Provider
、Bloc
、ScopedModel
和 Redux
和 MobX
之类的,我实在不知道他们在说些什么。随着时间的推移,状态管理解决方案的列表却不断的在增长。
在我的学习旅程中,我写了不少文章,关于 Stacked
、Provider
、Riverpod
,也学习过 Bloc
模式和 Bloc Library
的教程,看了 Cubit
和 GetX
,也看过 Redux
和 MobX
以及 Command
视频。但是这些库总是不能十分契合我的想法,他们要么有太多的选项,要么有太多的隐藏在背后的魔法。我的大脑需要简单和易于理解的极简。
这就是这篇文章的由来。我将要介绍一种方式来管理你的 App 状态,不需要引入任何第三方状态管理方案。唯一需要使用的第三方库是 GetIt
,它不是用来管理状态的,只是用来提供一个引用,访问你将要管理的状态的 Dart 类。
对于状态变化时的 UI 重建,将使用 Flutter 内建的 ValueNotifier
和 ValueListenableBuilder
类。
这篇文章的目的不是让你远离你现在使用的状态管理方案,毕竟如果当前方案适合你,确实没有任何理由去改变。然而,这篇文章是给像我一样的不了解状态管理的人的引导,为那些脑子还在弯弯绕的人们提供一个直观的解释。
App 架构总览
尽管可以把所有的 UI 和逻辑混合在一起,写在一个大文件里来构造一个 Flutter App,但是那样实在是难以去搞清楚这个 App 是如何运作的。对于大部分 App 来说,它们都至少会使用一点架构。
我们先从一个传统的 App 架构总览开始,下面每个的方框代表一个类或文件,或者是一个文件夹的文件。用这个 App 中的两个页面代表你整个 App 中的 10 到 20 个页面。
这其中一共有三个层级:UI 层,状态管理层,以及 Service 层。我们将要在下面的几节中逐个讨论他们的细节。