上一章 主页布局初步完成了,用到滚动了 就想怎么滚动控制要怎么完成,然后对应的逻辑代码怎么写。本来想自己参考ViewModel 把控制逻辑抽离出来的,后来发现还是给予状态控制来做比较好。想起了 redux (fish_redux之前看了一点),因为学习过rn的缘故 想起了mbox。然后一查 flutter居然也有实现。

对比Redux 与 mbox后 决定第一步采用mbox来实现状态管理
1 mbox在之前rn项目中采用 比较熟悉
2 mbox observer模式对于初学者容易接受和上手

fish_redux在阿里闲鱼中采用过 后续大型项目也可以采用。

flutter mbox开始-配置

image.png

简单的配置熟悉的一看都懂 注意两处配置都需要。

编写和生成viewmodel代码

image.png
标准的mbox 采用store 管理状态 但是相对于view 来说概念上我更倾向与viewmodel 也就是数据驱动view模型
image.png

viewmode只要更新show状态就行。

为啥是抽象类,part ‘**.g.dart’是什么?大神 代码爆红不识别啊

flutter packages pub run build_runner build // 执行一次build命令
flutter packages pub run build_runner watch // 文件更改自动打包
flutter packages pub run build_runner watch —delete-conflicting-outputs // 删除旧文件在打包
执行以上的命令,builder 会自动生成part 中定义的dart类
image.png

这样会使用具体的生成类中的方法功能。

widget中使用viewmodel

image.png

在最外层定义了IndexViewModel
在需要监听数据并自动响应更新的widget外面使用Observer包裹,使用builder:返回具体的widget,
例子中offstage :indexModel.getShow()来自动响应状态变化以及控件的显示和隐藏。

运行效果

normal video1.mp4 (748.27KB)

这样通过组件与viewmodel 隔离 可以使项目组件化 和逻辑控制都层次分明。

知识点:

滑动控制:ScrollController addListener 监听滑动过程
层次布局:stack (alignment: const FractionalOffset(0.7, 0.98) 或者 Postionted布局 设置偏移)
状态mbox: model的编写和生成
控件的显示与隐藏:Offstage

问题:运行flutter package get如果下载不动
export PUB_HOSTED_URL=https://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
设置pub源地址为大陆的

https://mobx.pub/getting-started flutter box上手指南
https://www.jianshu.com/p/3e3cc1a57937 dart mixin和with