Flutter(或者更宽泛的app开发)可以一句话总结为:
UI = f(state)
即app的当前界面(UI)反映了当前程序状态(state). Flutter的状态管理就是app根据当前app的state的显示和更新UI.
我们假设state是一个类型为T
的object, 在下文的购物车例子中, state是当前购物车的内容(类型T
=List<Item>
).
关于如何在widget tree里获取state, 可以有provider/riverpod等选项, e.g.Provider<T>
. 但是如果直接用T
作为状态会有问题: 就是当state的值被修改以后, 对应的UI并不会自动rebuild(除非其他逻辑如setState
触发了rebuild).
如果希望在state修改以后, UI自动触发监听它的UI更新, 则需要用各种Notifier来包裹state. 例如我们不用T
作为state, 而是用ValueNotifier<T>
.
这里主要介绍和比较三种常用的Notifier: ChangeNotifier ...