原地址:https://suragch.medium.com/flutter-state-management-for-minimalists-4c71a2f2f0c1

Flutter 对我来说最大的挑战就是学习状态管理。人们都在讨论什么 ProviderBlocScopedModelReduxMobX 之类的,我实在不知道他们在说些什么。随着时间的推移,状态管理解决方案的列表却不断的在增长。

在我的学习旅程中,我写了不少文章,关于 StackedProviderRiverpod,也学习过 Bloc 模式和 Bloc Library 的教程,看了 CubitGetX,也看过 ReduxMobX 以及 Command 视频。但是这些库总是不能十分契合我的想法,他们要么有太多的选项,要么有太多的隐藏在背后的魔法。我的大脑需要简单和易于理解的极简。

这就是这篇文章的由来。我将要介绍一种方式来管理你的 App 状态,不需要引入任何第三方状态管理方案。唯一需要使用的第三方库是 GetIt,它不是用来管理状态的,只是用来提供一个引用,访问你将要管理的状态的 Dart 类。

对于状态变化时的 UI 重建,将使用 Flutter 内建的 ValueNotifierValueListenableBuilder 类。

这篇文章的目的不是让你远离你现在使用的状态管理方案,毕竟如果当前方案适合你,确实没有任何理由去改变。然而,这篇文章是给像我一样的不了解状态管理的人的引导,为那些脑子还在弯弯绕的人们提供一个直观的解释。

App 架构总览

尽管可以把所有的 UI 和逻辑混合在一起,写在一个大文件里来构造一个 Flutter App,但是那样实在是难以去搞清楚这个 App 是如何运作的。对于大部分 App 来说,它们都至少会使用一点架构。

我们先从一个传统的 App 架构总览开始,下面每个的方框代表一个类或文件,或者是一个文件夹的文件。用这个 App 中的两个页面代表你整个 App 中的 10 到 20 个页面。

这其中一共有三个层级:UI 层,状态管理层,以及 Service 层。我们将要在下面的几节中逐个讨论他们的细节。

阅读全文 »

这份年终总结,本应当在元旦出炉,但是差不多一年多没写过什么文字了,一直无处下手。

2019 年,是我跳出体制内工作的第二年,生活逐步平稳,踏上了七八年前早就应当行走的轨迹。

先翻出来年初时候定的计划吧。

b4YNMU7HSAQf89u

技术

其实还是看完了不少书,主要涵盖在 Android 精进和 Rust 上。

播放器

这一年,主要在播放器与解码上精进,看完了以下源代码

  • ExoPlayer
  • IjkPlayer
  • FFmpeg

毕竟作为 Android 开发,主要精力都放在 Android 之上,除了以上,这一年还精进了一些内容

OpenGL ES

本质上和 OpenGL 没太大区别,学了 2 和 3,无奈 Android 上 3 基本处于不可用状态,顺带看了很多 RFC,一些 Android 专用的扩展(KHR,说你呢……

Jetpack

这玩意必不可少,主要集中在

  • Paging
  • Navigation
  • Room
  • 新的 Fragment 与 Activity
  • ViewModel
  • Lifecycle

Rust

我终于看完了几本 Rust 的书,包括实体书和电子版,不过目前看来纯的 Rust 没有我实践的余地,新年伊始,我开始啃 Unsafe Rust 部分,希望今年能写点东西出来。

生活

今天是在一起的 276 天~ 撒花~

10 月公司没了健身房,近两个月没有运动,体重稳定在了 100kg,新年伊始开始恢复。

慢慢的习惯了在北京的生活,过年不打算回家。

总结

2019 年有点……不知所措,现在看来不知道说点什么好,感觉没干什么。新的一年,继续加油吧~

由于几个月前的一次 hexo 升级失误,导致整个 blog 的源码(包括配置和_posts)都丢失了(手贱的 mv 命令),工作大半年以来,竟然没有一篇文章产出,实在是令我自己心酸。

不过好在,原来的站点内容都还在,只能是费点功夫再从生成的代码还原。

最近业务组 iOS 明显少于 Android,所以工作出现了难得的不饱和,在做技术升级的同时,就有了一些时间来做沉淀与提升。把 Blog 重新搞起来,把评论也做起来,强迫自己。