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

深圳建设网站龙岗网站建设h5网站和响应式网站区别

深圳建设网站龙岗网站建设,h5网站和响应式网站区别,ae模板精品站,江苏cms建站系统Flutter 中的 Selector 组件是 provider 包提供的一个优化工具,用于在状态管理中仅选择所需数据片段,避免不必要的 Widget 重建。其实现原理基于以下几个关键点: 1. 核心设计目标 选择性重建:仅当特定数据变化时触发 Widget 重建&…

Flutter 中的 Selector 组件是 provider 包提供的一个优化工具,用于在状态管理中仅选择所需数据片段,避免不必要的 Widget 重建。其实现原理基于以下几个关键点:


1. 核心设计目标

  • 选择性重建:仅当特定数据变化时触发 Widget 重建,而非整个状态对象变化时都重建。

  • 性能优化:通过比较数据片段的前后值,避免无关数据变化导致的冗余重建。


2. 实现原理

a. 继承自 StatefulWidget

Selector 是 StatefulWidget,其状态类(如 _SelectorState)负责管理数据监听和重建逻辑。

class Selector<T, R> extends StatefulWidget {final R Function(BuildContext, T) selector;final Widget Function(BuildContext, R, Widget?) builder;final Widget? child;const Selector({ /* 参数初始化 */ });@override_SelectorState<T, R> createState() => _SelectorState<T, R>();
}
b. 状态管理(State)
  • 监听数据变化:通过 Provider.of<T>(context) 获取依赖的状态对象,并监听其变化。

  • 缓存上一次值:保存上一次 selector 函数的结果(_lastValue)。

  • 比较新旧值:在数据变化时,重新计算 selector 结果,并与旧值比较,决定是否重建。

class _SelectorState<T, R> extends State<Selector<T, R>> {R? _lastValue;Widget? _child;@overridevoid didChangeDependencies() {final T model = Provider.of<T>(context);final R newValue = widget.selector(context, model);// 比较新旧值,决定是否重建if (_shouldUpdate(newValue)) {setState(() => _lastValue = newValue);}super.didChangeDependencies();}bool _shouldUpdate(R newValue) {return widget.shouldRebuild?.call(_lastValue, newValue) ?? (newValue != _lastValue);}@overrideWidget build(BuildContext context) {return widget.builder(context, _lastValue as R, _child);}
}
c. 生命周期方法
  • didChangeDependencies:在依赖的 Provider 数据变化时触发,重新计算并比较 selector 结果。

  • setState:仅当数据变化时调用,触发 Widget 重建。


3. 关键机制

a. 选择性监听
  • 使用 selector 函数从状态对象中提取关心的数据片段。例如:

    selector: (context, model) => model.name,
  • 仅当 selector 返回值变化时,才触发 builder 执行。

b. 值比较策略
  • 默认比较:使用 != 操作符比较新旧值(依赖对象覆写 == 和 hashCode)。

  • 自定义比较:通过 shouldRebuild 参数提供自定义逻辑,应对复杂数据结构的比较。

    Selector<Model, String>(shouldRebuild: (prev, next) => prev.length != next.length,// ...
    )
c. 子组件优化(Child Propagation)
  • child 参数:传递静态子组件,避免其随 Selector 重建。在 builder 中复用:

    builder: (context, value, child) {return Column(children: [Text(value), child!],);
    },
    child: const ExpensiveWidget(),

4. 性能优化点

  • 最小化重建范围:仅重建依赖特定数据片段的 Widget。

  • 避免闭包陷阱:将 selector 和 builder 定义为顶层或静态方法,防止不必要的重建。

  • 不可变数据:确保 selector 返回值是不可变的,或正确实现 == 和 hashCode


5. 源码实现总结

  1. 监听依赖:通过 Provider.of 监听状态对象变化。

  2. 提取数据:调用 selector 函数获取关心的数据片段。

  3. 比较值:若新值不同或满足 shouldRebuild 条件,触发重建。

  4. 构建 UI:调用 builder 函数生成 Widget,传递缓存子组件。

通过这一机制,Selector 在复杂的状态管理中显著提升性能,避免不必要的 UI 更新。


文章转载自:

http://EP3XJopL.nhzxr.cn
http://SzOhgDgb.nhzxr.cn
http://APdLC5R3.nhzxr.cn
http://InbkAjuB.nhzxr.cn
http://55jaQuoW.nhzxr.cn
http://8zUaVHZa.nhzxr.cn
http://TRFSWPKX.nhzxr.cn
http://NWhh2sRx.nhzxr.cn
http://z3w1a5rt.nhzxr.cn
http://iPYKN8Ul.nhzxr.cn
http://PQ0j1BwR.nhzxr.cn
http://KDQCnpi1.nhzxr.cn
http://0cAy3Y9h.nhzxr.cn
http://iACRECTk.nhzxr.cn
http://aiFzB42w.nhzxr.cn
http://24jIbHPx.nhzxr.cn
http://9U8hTe6o.nhzxr.cn
http://N0xPE9uS.nhzxr.cn
http://UvgzLO1Y.nhzxr.cn
http://8hphgIuA.nhzxr.cn
http://0dBqQlW9.nhzxr.cn
http://6TnRT1NL.nhzxr.cn
http://G2Vb1oGX.nhzxr.cn
http://RyFeqiy8.nhzxr.cn
http://ynBGN7iR.nhzxr.cn
http://eOOLuF7i.nhzxr.cn
http://qZTOj6xT.nhzxr.cn
http://fPPHlxYt.nhzxr.cn
http://Ov74wFzi.nhzxr.cn
http://rAgtG3s2.nhzxr.cn
http://www.dtcms.com/wzjs/710880.html

相关文章:

  • 淘宝做网站推广人电话东莞企业营销型网站
  • 先有域名才可以做网站吗WordPress 同步网易博客
  • 网站安全检测可以监测哪些内容风险信息温岭网站开发
  • 沈阳成创网站建设公司网站推广常用的方法
  • 献县网站建设淘宝客网站做app
  • 莱州网站定制广告设计公司怎么样
  • 品牌网站建设预算苏州哪家做网站便宜
  • 网站配置伪静态怎么避免网站开发后门
  • 北京手机网站搭建费用自己如何创立网站
  • 快速网站排名网站建设人员工作职责
  • 网站的空间和域名是啥湖州培训网站建设网络营销
  • 西宁市住房和城乡建设局网站网站如何做淘宝支付宝
  • 用qq号码可以做网站吗柯林建站程序
  • 财经大学网站建设保定网站建设报价
  • 整套网站建设视频教程wordpress如何关闭网页
  • 设计师网站十大网站排名网推软件有哪些
  • 哪里有免费的网站模板下载 迅雷下载 迅雷下载软件网站费用估算
  • 专门做饥饿营销的网站花卉网站建设规划书
  • 兰州做网站一咨询兰州做网站公司网站空间就是虚拟主机吗
  • 备案网站简介怎么写陕西网站建设
  • 怎样将自己做的网站发布到外网上网络销售怎么样
  • 如何做网站网页表白淘宝网站建设情况
  • 韩城网站建设网站做的好的公司
  • 公司策划是做什么的wordpress标签链接优化
  • 试描述一下网站建设的基本流程沽源网站建设案例
  • 国外源代码网站响应式网站的优缺点
  • 如何制作一个简单的网页西安官网seo公司
  • html怎么做网站首页淄博乐达网站建设
  • 甘肃住房与城乡建设部网站如何制作logo
  • 建设五证在那个网站可以查马云为啥说2025年房价如葱