Element的属性 _inheritedElements 的含义以及创建时机

js 复制代码
1 Element的属性 _inheritedElements 的含义以及创建时机 _inheritedElements 类型是PersistentHashMap<Type, InheritedElement>?。存储的是Element树上的所有InheritedElement

2 _inheritedElements 的创建时机在_updateInheritance中

  2.1 Element的默认实现如下
  
    void _updateInheritance() {
    assert(_lifecycleState == _ElementLifecycle.active);
    _inheritedElements = _parent?._inheritedElements;}
    
  2.2 只有在InheritedElement重写了这个方法
  
  void _updateInheritance() {
    assert(_lifecycleState == _ElementLifecycle.active);
    final PersistentHashMap<Type, InheritedElement> incomingWidgets =
        _parent?._inheritedElements ?? const PersistentHashMap<Type, InheritedElement>.empty();
    _inheritedElements = incomingWidgets.put(widget.runtimeType, this);
  }
  
  2.3 从上面的代码 我们可以得出如下结论
  
     2.3.1 在Element树上,只有遇到InheritedElement才会主动创建
  _inheritedElements,之后所有的child 通过_parent?._inheritedElements 一级一级的传递。
     
     2.3.2 当Element树创建的时候如果出现类型相同的InheritedElement,那么后出现的
     InheritedElement再执行_updateInheritance方法的时候,会把自己放入
     _inheritedElements,因为widget.runtimeType两个相同的InheritedElement获取的是一样
     的,所以相当于说是替换了原来_inheritedElements里面存的旧的跟自己类型相同的InheritedElement。
     也就是说_inheritedElements里面存储的是Element树上的所有的InheritedElement,如果有重复的,那存储的就是离自己最近的那一个InheritedElement。
相关推荐
liulian09163 小时前
Flutter for OpenHarmony 跨平台开发:BMI计算器功能实战指南
flutter·华为
xmdy58666 小时前
Flutter+开源鸿蒙实战|智安盾电商溯源平台Day1 项目搭建与整体方案拆解
flutter·开源·harmonyos
小白640212 小时前
AI辅助设计Flutter蓝牙自动连接系统
人工智能·flutter
xmdy586612 小时前
Flutter+开源鸿蒙实战|智联邻里Day6 引入GetX全局架构+升级版下拉刷新+Toast弹窗+网络状态监听
flutter·开源·harmonyos
xmdy586613 小时前
Flutter+开源鸿蒙实战|智联邻里Day5 闲置详情页+删除功能+下拉刷新+交互优化
flutter·开源·harmonyos
maaath13 小时前
【maaath】Flutter for OpenHarmony 媒体工具应用开发实战
flutter·华为·harmonyos
maaath14 小时前
【maaath】 Flutter for OpenHarmony 快捷工具箱应用实战开发
flutter·华为·harmonyos
maaath14 小时前
【maaath】Flutter for OpenHarmony 实战:茶叶茶艺应用开发详解
flutter·华为·harmonyos
maaath15 小时前
【maaath】Flutter for OpenHarmony 的手办展示应用开发实践
flutter·华为·harmonyos
jiejiejiejie_1 天前
Flutter for OpenHarmony 心情日记功能实战指南
flutter·华为