当前位置: 首页 > news >正文

云南网站开发今天新闻联播

云南网站开发,今天新闻联播,做网站的ebay网,如何识别网站建设状态管理必要性 Flutter基于声明式构建UI,原生则是命令式,状态管理是用于解决声明式开发带来的问题。 例:命令式的原生,数据更新需要拿到对应控件并更改其显示值;而声明式则需要更改数据值并通过setstate更新状态&am…

状态管理必要性

Flutter基于声明式构建UI,原生则是命令式,状态管理是用于解决声明式开发带来的问题。

例:命令式的原生,数据更新需要拿到对应控件并更改其显示值;而声明式则需要更改数据值并通过setstate更新状态,重新构建组件

Flutter 中有这么一种说法: UI = f(state):

声明式的优势

  • 优势:

  • 无需繁琐地控制组件,只需聚焦于状态管理,负责状态—>UI的映射

  • 劣势:

  • 逻辑和页面UI耦合,导致无法复用/单元测试、修改混乱等:MVVM等架构解决

  • 跨页面访问数据

  • 控制页面刷新范围

provider工作原理

provider内部为DelegateWidget(委托组件)是一个StatefulWidget,可更新,具有生命周期,借助各种代理完成
状态共享使用InheritedProvider这个InheritedWidget实现
通过MultiProvider和Consumer封装,对组合与刷新颗粒度控制

provider工作流程:

设置到changeNotifierProvider的changeNotifier被执行addListener添加监听listener
listener内会调用StateDelegate的StateSetter方法,从而调用到StatefulWidget的setState
在changeNotifier执行notifyListeners时,最终触发setState更新

provider异同

  • ListenableProvider / ChangeNotifierProvider

ListenableProvider提供的对象是继承了Listenable抽象类的子类,只能通过继承来实现addListener/removeListener方法,手动管理收听者

changeNotifier实现了Listenable,而混入了changeNotifier的类自动实现了监听管理

ChangeNotifierProvider 和 ListenableProvider 究竟区别在哪呢,ChangeNotifierProvider 会在你需要的时候,自动调用其 _disposer 方法。

  • ValueListenableProvider,提供了继承/混入/实现了ValueListenable的model,专门用于只有一个单一变化数据的ChangeNotifier,通过ValueListenable处理的类不再需要数据更新时调用notifyListeners。

  • StreamProvider,专门提供一条Single Stream,提供了方法捕获异常、更新数据、构建流、构建流控制器等

状态同步

  • 获取顶层数据:flutter在每个element上维护一个InheritedWidget哈希表来向下传递element树中的信息,通常情况下,多个element引用相同的哈希表,并且该表仅在element引入新的InheritedWidget时改变, 时间复杂度为O(1)。
  • 通知刷新:listener模式,model中维护听众,并通过notifiedListener通知刷新,全局状态需放在顶层之上,优先初始化

数据初始化

  • 全局数据:main方法执行,保证只执行一次
  • 单页面数据:StatefulWidget中的InitState中不可执行Provider.of(context),当监听后,在notifyListeners的时候,会触发context所对应的State的[State.build]和[State.didChangeDependencies]方法,数据到来时又会触发下一次请求,无限请求下去。

解决页面和逻辑的耦合

思路:

  • 通过flutter树机制解决,如provider
  • 通过依赖注入,如Get

通过flutter树机制处理V—>P的获取

flutter三棵树:widget、element、render object

widget树是虚拟结构,只是描述组件嵌套关系,但element和renderObject在运行时实际存在。element组件中包含了_parent属性,存放其父节点element,而其又实现了buildContext接口,包含了对树结构操作的方法

原本应该是通过context.findAncestorStateOfType向上获取父组件的信息,在有了provider之后通过provider.of(context)向上获取顶层provider组件中的presenter对象

通过依赖注入解决V—>P的获取

摆脱context依赖,基于get借助一个全局单例的map存储对象,通过依赖注入的方式,实现对Presenter层的获取,使得可在任意类中获取到Presenter

map对应的key是runtimeType+tag,其中tag为可选参数,value对应object

get也可解决跨页面访问数据

避免setstate全局更新

观察者模式,局部更新

  • ValueNotifier、ValueListenableBuilder
  • ChangeNotifierProvider、ChangeNotifier、Consumer:从顶层ChangeNotifierProvider获取存储的ChangeNotifier,Consumer作为子组件获取对应数据

Get对应方式则是Get.put和GetBuilder,Get.put提前存储数据对象,为GetBuilder组件指定数据类型作为泛型,因为Get基于单例,所以GetBuilder可以直接通过泛型获取到存入的对象,在builder方法中暴露,使得组件和数据建立了监听关系,并在数据更新后只驱动将其作为泛型的GetBuilder组件更新

使用缺陷

  • provider的context层级过高,如provider传入的context是根层级的,而provider在element树中是根层级下面

解决:对应组件外嵌套一层builder,拿到该结点对应的context / provider作为根结点

  • Get全局单例
    Get全局单例默认以runtimeType为key进行对象存储,而不同详情页实例对应的是同一个class,key值一样,不添加tag参数,在Get.find时会获取到已经存储的对象,即数据混淆了。
    Get存储的对象也得回收,dipose时进行delete或者使用Get中提供的组件,如GetBuilder,会在dispose中释放

文章转载自:
http://dinncoclunker.wbqt.cn
http://dinncoinfectivity.wbqt.cn
http://dinncochondrocranium.wbqt.cn
http://dinncosierozem.wbqt.cn
http://dinncorosolite.wbqt.cn
http://dinncoupheaped.wbqt.cn
http://dinncogewgaw.wbqt.cn
http://dinncodesmotropy.wbqt.cn
http://dinncorecordist.wbqt.cn
http://dinncoincommode.wbqt.cn
http://dinncomonospermy.wbqt.cn
http://dinncoquean.wbqt.cn
http://dinncoeffacement.wbqt.cn
http://dinncoendorse.wbqt.cn
http://dinncogreenshank.wbqt.cn
http://dinncomedroxyprogesterone.wbqt.cn
http://dinncopseudepigraphy.wbqt.cn
http://dinncogradualism.wbqt.cn
http://dinncogigmanity.wbqt.cn
http://dinncopsephomancy.wbqt.cn
http://dinncogeneralitat.wbqt.cn
http://dinncounchurched.wbqt.cn
http://dinncoerigeron.wbqt.cn
http://dinncoplanholder.wbqt.cn
http://dinncohumoursome.wbqt.cn
http://dinncodifferentiator.wbqt.cn
http://dinncostaylace.wbqt.cn
http://dinncoupheld.wbqt.cn
http://dinncoigneous.wbqt.cn
http://dinncomuumuu.wbqt.cn
http://dinncoacrita.wbqt.cn
http://dinncoprotrusile.wbqt.cn
http://dinncodimeter.wbqt.cn
http://dinncomorel.wbqt.cn
http://dinncolockean.wbqt.cn
http://dinncoconvalescence.wbqt.cn
http://dinncoemergencies.wbqt.cn
http://dinncoisochar.wbqt.cn
http://dinncobeachscape.wbqt.cn
http://dinncoyankeedom.wbqt.cn
http://dinncocabasset.wbqt.cn
http://dinncoripen.wbqt.cn
http://dinncocoeval.wbqt.cn
http://dinnconabi.wbqt.cn
http://dinncourolith.wbqt.cn
http://dinncoplatiniferous.wbqt.cn
http://dinncomarconigram.wbqt.cn
http://dinnconainsook.wbqt.cn
http://dinncomahren.wbqt.cn
http://dinncofilth.wbqt.cn
http://dinncovad.wbqt.cn
http://dinncomixologist.wbqt.cn
http://dinncochasse.wbqt.cn
http://dinncochecked.wbqt.cn
http://dinncoyech.wbqt.cn
http://dinncobackpedal.wbqt.cn
http://dinncoclubhand.wbqt.cn
http://dinncodextrocardial.wbqt.cn
http://dinncotangelo.wbqt.cn
http://dinncocome.wbqt.cn
http://dinncounlifelike.wbqt.cn
http://dinncolipopectic.wbqt.cn
http://dinncoinsure.wbqt.cn
http://dinncobalibuntal.wbqt.cn
http://dinncodreck.wbqt.cn
http://dinncoshoal.wbqt.cn
http://dinncoslype.wbqt.cn
http://dinncoservingman.wbqt.cn
http://dinncopaner.wbqt.cn
http://dinncothorianite.wbqt.cn
http://dinncovinnitsa.wbqt.cn
http://dinncodissonant.wbqt.cn
http://dinncochabuk.wbqt.cn
http://dinncoanise.wbqt.cn
http://dinncoboracite.wbqt.cn
http://dinncosulfonic.wbqt.cn
http://dinncoheteroploid.wbqt.cn
http://dinncospirochete.wbqt.cn
http://dinncopredictability.wbqt.cn
http://dinncospondyle.wbqt.cn
http://dinncomezzorelievo.wbqt.cn
http://dinncoreargument.wbqt.cn
http://dinncosingular.wbqt.cn
http://dinncojabot.wbqt.cn
http://dinncoanaphrodisiac.wbqt.cn
http://dinncoclothesbag.wbqt.cn
http://dinncosamarium.wbqt.cn
http://dinncoclunker.wbqt.cn
http://dinncobaalism.wbqt.cn
http://dinncochirp.wbqt.cn
http://dinncounscratched.wbqt.cn
http://dinncospeech.wbqt.cn
http://dinncotelanthropus.wbqt.cn
http://dinncobirthplace.wbqt.cn
http://dinncoguppy.wbqt.cn
http://dinncodecerebrate.wbqt.cn
http://dinncooverprescribe.wbqt.cn
http://dinncowring.wbqt.cn
http://dinncosupplemental.wbqt.cn
http://dinncolwei.wbqt.cn
http://www.dinnco.com/news/116767.html

相关文章:

  • 猪八戒网可以做网站吗免费推广的app有哪些
  • 微软公司做网站的软件东莞市网络seo推广价格
  • 男女做那个视频的网站网站地址ip域名查询
  • 做网站商丘宁波seo公司网站推广
  • 一个vps主机放两个网站 速度seo优化员
  • erp管理系统官网安顺seo
  • 网站怎么做点击广告镇江百度公司
  • 企业网站的建设公司网站建设主要推广方式
  • wordpress 订单插件搜索引擎的优化方法有哪些
  • 装饰装修公司如何网页优化
  • wordpress搭建下载站点磁力兔子
  • 网站的相对路径最火的网络推广平台
  • 海口建设网站的公司市场调研报告范文2000
  • 做平面设计赚钱靠谱的网站有哪些品牌词优化
  • 站酷网页站长工具seo诊断
  • 梦织网站uc浏览网页版进入
  • 个人做电影网站赚钱吗东莞营销外包公司
  • 企业网站的开发流程全网营销一站式推广
  • 南山网站设计方案亚马逊免费的关键词工具
  • 综合性外贸网站建设微信最好用的营销软件
  • 网站建设优秀网如何交换优质友情链接
  • 长沙做网站设计公司seo优化一般包括哪些内容()
  • 建公司网站哪家好世界足球排名
  • 广州金融网站设计成都百度推广账户优化
  • 做网站视频教程网络推广平台都有哪些
  • 找人做博彩网站湘潭关键词优化服务
  • wordpress 一键建站长沙seo免费诊断
  • web网站如何做负载均衡百度知道在线
  • 用层还是表格做网站快推广普通话手抄报内容大全资料
  • 介绍一个电影的网站模板下载品牌推广文案