码迷,mamicode.com
首页 > 其他好文 > 详细

Flutter 功能型组件:跨组件状态共享(Provider)

时间:2020-01-16 19:18:35      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:eve   前言   全局   模式   代码   代码示例   私有   原则   内存   

前言

??在Flutter开发中,状态管理是一个永恒的话题。
??一般的原则是:如果状态是组件私有的,则应该由组件自己管理;如果状态要跨组件共享,则该状态应该由各个组件共同的父元素来管理。
??对于组件私有的状态管理很好理解,但对于跨组件共享的状态,管理的方式就比较多了,如使用全局事件总线EventBus,它是一个观察者模式的实现,通过它就可以实现跨组件状态同步:状态持有方(发布者)负责更新、发布状态,状态使用方(观察者)监听状态改变事件来执行一些操作。
??但是观察者模式来实现跨组件状态共享有一些明显的缺点:

  1. 必须显示定义各种事件,不好管理;
  2. 订阅者必须显式注册状态改变回调,也必须在组件销毁时手动去解绑回调以避免内存泄漏;

??是否还有更好的跨组件状态管理方式了?
??我们知道,InheritedWidget能绑定与它依赖的子孙组件的依赖关系,并且当InheritedWidget数据发生变化时,可以自动更新依赖的子孙组件。基于此,可以将需要跨组件共享的状态保存在InheritedWidget中,然后在子组件中引用InheritedWidget即可。Flutter社区的Provider包就是基于这个思想实现的。

Provider

代码示例

代码优化

总结

Flutter 功能型组件:跨组件状态共享(Provider)

标签:eve   前言   全局   模式   代码   代码示例   私有   原则   内存   

原文地址:https://www.cnblogs.com/parzulpan/p/12202577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!