安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

你真的用对了Provider吗?可能你正在用它毁了App的性

4月24日 壹世缘投稿
  对于Flutter开发的工程师们,肯定是对Provider很熟悉。
  这个是官方推荐的一个状态管理插件。对于Flutter应用Provider的出现是提高App性能一剂良药,也是管理状态的良好工具,可是Provider真的就是一个没有副作用的状态管理利器吗?非也!甚至他会毁掉你的App!
  完全无必要的无脑使用
  首先我们以一个widgets树为例来解说:
  图例说明:
  上图中我们Widgets分别是一个Root视图;还有4个子Widgets,分别是:
  Text
  Chart1
  Chart2
  ListView
  子Widgets它们分别对应数据源是:
  text
  chartData1
  chartData2
  list
  现在清楚我们的Widgets树层级结构和数据来源,我们开始使用Provider来进行状态管理;首先我们应该在根Widget中设置ChangeNotifierProvider用来包裹数据源和组件视图;然后创建ChangeNotifier关联数据和变化通知;最后子视图就可以跨层级使用ChangeNotifierProvider包裹的数据源。简单说明一下代码逻辑:我们来看一下例子:
  构建一个ChangeNotifier:classModelNotifierextendsChangeNotifier{varchartData1;varchartData2;updateText(newText){textnewTnotifyListeners();}。。。省略其余更新函数。。。获取远程数据源getRemoteData(){}}ps:伪代码
  这是一个简单的页面级的例子:。。。省略非关键代码returnChangeNotifierProvider(create:(context)CartModel(),child:constRootWidget(Consumer(Text(text)),Collection(Consumer(Chart1(chartData1)),Consumer(Chart2(chartData2)),),Consumer(ListView(list)),),)。。。省略非关键代码ps:伪代码
  以上我们将伪代码也粘贴了出来,现在我们来演示一下数据从远程过来之后,Provider更新数据状态进而更新UI的流程。
  首先,假设这是一个接口返回回来的数据,这个时候我们将一并获取:text、chartData1、chartData2、list的数据,那么我们想要更新4个子Widget就必须分别调用updateText以及其他的更新视图的函数,并传递从接口获取到新的数据;这个时候我们就会发现,Provider的使用就变的没有任何意义,甚至拖沓了更新UI的时间,我们完全可以不使用Provider处理数据,完全可以在根视图中采用setStates函数来刷新整个层级树,以为此时的Provider做的事情也是刷新整个层级树视图。所以分析可以知道有几个不合理的点:一个接口就获取到所有数据更新数据源的时候没有判断数据的更新内容
  改良
  我们就针对两个问题进行处理,第一我们分别对接口进行拆分若干:
  1。获取Text内容
  2。获取两个Charts的内容
  3。获取ListView的内容
  这样我们可以在获取某些数据的时候对部分组件进行更新,且在同一时间减少了整体渲染带来的大量性能损耗。
  其次,对新数据的检查也是有必要的额,首先我们要增加数据新旧检验的机制,在通过检验,新数据符合渲染条件,就通知更新,否则就放弃本次的更新,这样也在一定程度上减少渲染次数。
  总结
  Provider的合理使用是提高整体性能的保证,我们在很多的静态数据面前,其实是没有使用Provider的必要的,甚至在一些只是更新数据而不涉及UI更新的地方也需要使用注意使用Provider的非更新UI机制用法,其次就是针对接口的调整,在庞大的数据集合中,合理地拆分接口数据可以减少对流量的浪费。也可以让用户体验更上一个台阶。
投诉 评论 转载

对于有长期听损患者而言,戴助听器真的会有效果吗?有残余听力就可以佩戴助听器,听力损失时间越久,言语分辨率就会越低,可能要配合言语训练效果会更好一些,可以到专业的验配中心咨询试听您好,对于有长期听损患者而言,戴助听器真的……2021年数码圈盘点小米卢伟冰怼人的经典时刻,准时还直击痛点最近看到数码圈这一年这个话题,脑海中蹦出的第一个念头就是去年小米旗下的Redmi品牌总经理卢伟冰又重回青春了!在数码圈竞争激烈的2021年,华为空出了大量的市场份额,小米……自己拥有一台服务器可以做哪些很酷的事情?一、10分钟构建一个属于自己的web文件存储共享平台,特点:1、直接通过浏览器访问现代化和漂亮的界面进行文件上传和下载,使用体验完全胜过过时的FTP,登录界面……上交所传来航母级利好,新能源迎来3万亿融资额度上交所消息:上交所将围绕吸引境外中长期资金入市为主线,用好国际投资者大会品牌,讲好中国故事,发挥多方沟通协调的桥梁作用,进一步探索市场开放路径,提升外资参与市场的广度和深度,落……9。23发华为新机官宣100W快充全系4G撞期苹果13?小米声音小白伴随着9月到来,距离华为P50开售应该也不远了,与此同时,华为还有其他新机到来。据华为官方预热,由易烊千玺代言的华为nova9系列将于9月23日上市,官方预……OPPO与华中科技大学举行新型存储创新技术联合实验室揭牌仪式1月10日,OPPO与华中科技大学举行了新型存储创新技术联合实验室揭牌仪式。未来,双方将围绕计算机体系结构、移动存储技术、软硬件垂直整合等领域的研究展开深入合作。OPPO……四大运营商8。31日政企信息化项目本日四大运营商中标全国政企信息化项目3亿2645万元,其中电信中标9068。92万元,占比27。78,排名第二;广电3564。27万元,占比10。91,排名第四;联通8748。……QiushiJournalExcerpt数字经济健康发展,有(ExcerptsfromBuildingUptheStrength,Quality,andSizeofChina’sDigitalEconomybyXiJinping,Qiu……人工智能时代,如何加强我国国际传播能力建设?当前,国际环境错综复杂,新冠肺炎疫情、俄乌冲突等事件加速世界大变局的演进,国际舆论场变得更为复杂。人工智能技术应用与发展一方面推动国际传播生态变革,另一方面也对我国国际传播带来……2022。01。26建议国家建设无人驾驶高速公路的想法2022。1。26的想法:国家是否能够着手建设一条无人驾驶高速公路,货物无人驾驶高速公路上不能行驶载人车辆。公路可以建立在现有高速公路的旁边,这样货物无人驾驶高速公路和现……Linux设置定时任务crontab命令看了同事的脚本,发现他用了cron来自检自身的那个程序是否崩溃了,这是有多大的不自信才用这种机制的?点击(此处)折叠或打开sudocatvarspoolcroncront……你真的用对了Provider吗?可能你正在用它毁了App的性对于Flutter开发的工程师们,肯定是对Provider很熟悉。这个是官方推荐的一个状态管理插件。对于Flutter应用Provider的出现是提高App性能一剂良药,……
高通出事了!芯片被曝存在安全隐患,超10亿手机用户将受影响荣耀Magic3和小米IMX4怎么选择购机?特斯拉未来生财利器遇挫撤除自动驾驶软件停车功能召回逾5万辆车商务部回应加拿大政府禁止华为中兴有关电信设备进入加拿大市场响应清朗行动小红书联合中网联举办网络生态治理行业研讨会从传统图像算法到深度学习,文字识别技术经历了这些变化下半年造车新势力有哪些大动作?小鹏P5大秀操作杀毒软件360与火绒哪个好?这五个Web前端开发必不可少的开源框架,闭眼入高通骁龙888折叠屏1亿像素,小米MixFold降价3000中国芯片奇才黄芊芊,28岁成为北大博导,一招制敌助华为摆脱困现在的手机双卡双待,为什么很多人开始用两个手机?硬皮病的治疗(硬皮病到底是一种什么病?)金边兰花怎么养殖方法和注意事项火灾报警器的意义哪些是孕期常见生理讯息如何保护iPhone的屏幕宝宝出牙的症状及应对妙招知识产权工作对企业创新发展的重要性探讨魔法生命圈暴囧笑话搞笑短信,顺口溜小笑话大班9月家长会的发言稿33比38!美国还能追上中国么?留给美国的时间不多了苹果电池服务费增加,小米11售后时间增至三年,还是国产香

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利