scope_model 、flutter_redux、fish_redux 、甚至还有有 dva_flutter 等等,可以看出状态管理在 flutter 中和前端十分相近。
这里简单说说 scope_model ,它只有一个文件,但是很巧妙,它利用的就是 AnimationBuilder的特性。
如下图是使用代码,在前面我们知道,状态管理使用的是 InheritedWidget 实现共享的,而当我们对 Model 进行数据改变时,通过调用 notifyListeners 通知页面更新了。
这里的原理是什么呢?
其实 scope_model 内部利用了 AnimationBuilder ,而 Model 实现了 Listenable 接口。
当 Model 设置给了 AnimationBuilder 时, AnimationBuilder 会执行 addListener添加监听,而监听方法里会执行 setState。
所以我们改变 set 方法时调用 notifyListeners 就触发了 setState 去更新了,这样体现出了前面说的 FLutter 常见的开发模式。