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

net112企业建站系统网站设计 布局

net112企业建站系统,网站设计 布局,河北区网站建设,销售用什么软件找客户状态管理必要性 Flutter基于声明式构建UI#xff0c;原生则是命令式#xff0c;状态管理是用于解决声明式开发带来的问题。 例#xff1a;命令式的原生#xff0c;数据更新需要拿到对应控件并更改其显示值#xff1b;而声明式则需要更改数据值并通过setstate更新状态原生则是命令式状态管理是用于解决声明式开发带来的问题。 例命令式的原生数据更新需要拿到对应控件并更改其显示值而声明式则需要更改数据值并通过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是runtimeTypetag其中tag为可选参数value对应object get也可解决跨页面访问数据 避免setstate全局更新 观察者模式局部更新 ValueNotifier、ValueListenableBuilderChangeNotifierProvider、ChangeNotifier、Consumer从顶层ChangeNotifierProvider获取存储的ChangeNotifierConsumer作为子组件获取对应数据 Get对应方式则是Get.put和GetBuilderGet.put提前存储数据对象为GetBuilder组件指定数据类型作为泛型因为Get基于单例所以GetBuilder可以直接通过泛型获取到存入的对象在builder方法中暴露使得组件和数据建立了监听关系并在数据更新后只驱动将其作为泛型的GetBuilder组件更新 使用缺陷 provider的context层级过高如provider传入的context是根层级的而provider在element树中是根层级下面 解决对应组件外嵌套一层builder拿到该结点对应的context / provider作为根结点 Get全局单例 Get全局单例默认以runtimeType为key进行对象存储而不同详情页实例对应的是同一个classkey值一样不添加tag参数在Get.find时会获取到已经存储的对象即数据混淆了。 Get存储的对象也得回收dipose时进行delete或者使用Get中提供的组件如GetBuilder会在dispose中释放
http://www.zqtcl.cn/news/218290/

相关文章:

  • 黑龙江省城乡和住房建设厅网站首页公司营业执照查询
  • 锦州北京网站建设支付公司网站建设会计分录
  • 泉州做网站优化价格软件公众号开发
  • 商丘旅游网站的建设攀枝花城市建设网站
  • 网站主页设计素材一条龙做网站
  • 咖啡店网站首页怎么做163邮箱注册
  • 网站开发开源程序网站建设及推广销售话术
  • 门户网站和官网的区别美间在线设计平台
  • 淮南制作网站游戏代理哪个平台正规
  • seo网站推广软件 快排手机网页小游戏
  • 上海免费网站建设品牌长沙com建站网站设计
  • 大网站成本品牌设计风格
  • 电大形考任在哪个网站做湖南seo推广服务
  • dede网站 异步生成wordpress 页面新建
  • 郑州网站制作网页网站优化我自己可以做吗
  • 合肥做网站的公司百度做兼职去哪个网站
  • 重庆市城市建设规划官方网站一款app从开发到上线的流程
  • 微网站开发难吗登录qq网页版
  • 网站不备案能解析吗网站开发项目中职责
  • 三优科技 网站开发网站开发实训报告总结
  • 离线推广网站规划书常用的网站都有哪些
  • 成都 视频网站建设网站邮件推送
  • 深圳均安网站制作温州网站优化案例
  • 做网站需要哪些流程网站建设中项目经理的职责
  • 专业低价建设微网站微商城怎么样在wordpress上添加播放视频
  • 网站制作经费预算表域名备案信息查询系统
  • 苏州网站建设找苏州聚尚网络推荐南昌个人网站制作怎么做
  • 普法网站建设wordpress伪静态404错误
  • 易语言如何做浏网站湛江高端网站开发
  • 窦各庄网站建设wordpress 意见反馈