美文网首页
Flutter Redux和Provider

Flutter Redux和Provider

作者: DerekTime | 来源:发表于2020-03-05 15:30 被阅读0次

    在flutter中,跨组件状态共享是一个非常重要的课题,在一切皆为widget的前提下,一般的原则是:如果状态是组件私有的,则应该由组件自己管理;如果状态要跨组件共享,则该状态应该由各个组件共同的父元素来管理。对于组件私有的状态管理很好理解,但对于跨组件共享的状态,管理的方式就比较多了,这里讨论两个最火的框架,Redux和Provider。

    Redux

    Redux 的思想来自于前端,作为android 开发的我,掌握起来有点费劲,好在思路比较清晰,反复理解几遍后,也能理解的七七八八。Redux的状态流转图可以参考如下:

    对这张图进行一下说明。

    所有的状态都存储在Store里。这个Store会放在根Widget.

    View拿到Store的状态数据会映射成视图渲染.

    Redux不直接让view操作数据,通过dispatch一个action通知Reducer,状态变更

    Reducer接收到这个action,根据action状态,生成新的状态,并替换在Store的旧状态.

    Store存储了新的状态后,就通知所有使用到了这个状态的View更新(类似setState)。这样我们就能够同步不同view中的状态了.

    网上有很多介绍Redux的demo了,有个入门的教程Flutter 入门讲的非常透彻

    这篇文章主要是对比,不侧重于普及某个技术。

    理解了原理和敲完demo之后,对Redux应该有所了解了。除了dispatch action之外,Store的管理都得自己搞定。

    Provider

    Provider是官方推荐的状态管理框架,Flutter实战这本书阐述了原理,书的地址是https://book.flutterchina.club,也是flutter中文网的首选入门书籍,这里讲跨组件共享的时候,先理解了InheritWidget,它的天生特性就是能绑定InheritedWidget与依赖它的子孙组件的依赖关系,并且当InheritedWidget数据发生变化时,可以自动更新依赖的子孙组件!因为Provider就是对这一层进行了封装。大概的流程图如下:

    具体的用法已经在书籍中了,我就不重新造轮子了。

    比较

    流程上还是Provider比较清晰,有点类似观察者的味道,熟悉观察者设计模式的同学,看到之后会觉得熟悉的味道,熟悉的配方。Redux的设计理念就不是那么容易懂.

    Redux思想来源于前端,对于前端同学掌握比较简单。从代码量来说,Redux要做的比较多,需要自己实现Store,Reducer。Provider基本只要实现继承于ChangeNotifier即可。

    从使用共享状态来说,两者都差不多,一个是StoreConnector,一个是Consumer,两者都可以控制刷新力度,但据我实测,StoreConnector之外的FlattonButton的dispatch了action,这个FlattonButton还是会重新build,这个令人有点诧异

    不管哪个框架,最终思想就是子组件共享父组件中的数据,方式不同,目的相同。

    ————————————————

    版权声明:本文为CSDN博主「快乐的编码小猪」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

    原文链接:https://blog.csdn.net/hanshengjian/article/details/102675566

    相关文章

      网友评论

          本文标题:Flutter Redux和Provider

          本文链接:https://www.haomeiwen.com/subject/rsrfrhtx.html