iloveq / flutter_fish

仿闲鱼 flutter demo
Other
22 stars 6 forks source link

请教关于状态管理 #2

Closed winsonet closed 5 years ago

winsonet commented 5 years ago

我其实也看了好几个flutter的设计模式应用,感觉还是你这个版本的MVP比较适合我,但我想请教一下MVP里如何对状态进行管理呢?是否还要配合上 Redux 才比较好(如果是,不知能否提供一些示例呢)?如果只是MVP框架,也可以实现像 Redux 这种全局变量效果吗?如比较典型的应用就是用户登录后的用户信息获取。

如能抽空解答就太感谢啦:)

iloveq commented 5 years ago

android/ios 传统 app 开发 ,每个页面的状态都是随着系统回调来创建/ 销毁,model / view / presenter 也跟着页面状态来创建 / 销毁 / 回收,redux 状态页面管理显得多余,而且页面间状态共享也不是特别多。

flutter 只是通过 dart 运行时改变 renderNode 的状态 再通过调用 skia 2D引擎 将图像渲染出来 本质上这块显示 是 surfaceView 还得通过 android/ios 系统的 setContentView 再走系统的生命周期 并没有频繁的页面创建回收,有的只是 widget 的组件的一些状态变化,进而引起渲染的视图变化

redux 是一种前端流行的状态管理机制,因为前端页面经常是单页应用,涉及到组件间状态共享 ,和 flutter widget tree 很类似,一个应用就一棵树,树的各个分叉都需要状态修改,共享 我之前做过一个前端小项目用过 类似 redux 的 叫Vuex,你可以根据这个写一个类似的状态管理容器store

Vuex 理解:针对vue的数据管理集合,类似于数据库 action,Mutation类似于事物和存储过程 中文文档: https://vuex.vuejs.org/zh/guide/ 项目使用: https://github.com/woaigmz/postcard

针对的您上面提到的问题: mvp 不需要类似的状态管理,但是也可以共享一些页面特有的标识,只需要一块共享内存/本地磁盘等 · redux 更面向数据驱动(参考下 alibaba 的 fish_redux),应该是和 mvp 或 Bloc (google 了解一下)同等级的 代码设计模式
用户登陆信息获取可以通过内存或者文件 shareperface 等 redux 提供了一系列 action 规范,更是一种架构思想

我理解的只有这么多了😂 最近网上看到一些项目,您可以参考下:)咱们一起学习 架构Sample: https://github.com/Yuzopro/flutter_architecture OpenGit_Flutter项目: https://github.com/Yuzopro/OpenGit_Flutter/tree/master OpenGit_Flutter项目BloC尝试: https://github.com/Yuzopro/OpenGit_Flutter/tree/dev_blo OpenGit_Flutter项目Redux尝试: https://github.com/Yuzopro/OpenGit_Flutter/tree/dev_redux

winsonet commented 5 years ago

哇,真是太感谢啦,没想到你能给我这么详细的回复!其实我之前就是看了

https://github.com/CarGuo/GSYGithubAppFlutter

的作者说过一段话,说MVP的使用发现有些问题,在做下拉更新是不太好用,所以他才转向使用了Redux的,因此我才对此产生了困惑。其实我也是接触flutter不久,只是自己勉强完成了一个项目,但很我概念都还不太清楚,发现自己的项目也非常粗糙,呵,所以才想研究下这些模式看哪个适合自己。

感谢你的建议和提供的连接,我会再仔细研究研究的 :)

对了,其实我在运行你的代码时,发现有些错误,我今晚再发个issue请教下,谢啦!