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。
相关推荐
鹏多多9 小时前
解锁flutter弹窗新姿势:dialog-flutter_smart_dialog插件解读+案例
前端·flutter·客户端
西西学代码18 小时前
Flutter---个人信息(5)---持久化存储
java·javascript·flutter
芝麻开门-新起点19 小时前
Flutter 存储管理:从基础到进阶的完整指南
flutter
星释19 小时前
鸿蒙Flutter三方库适配指南:10.插件测试
flutter·华为·harmonyos
Bryce李小白19 小时前
Flutter boost权威指南
flutter
BigPomme1 天前
Flutter 3.29.0 使用RepaintBoundary或者ScreenshotController出现导出图片渲染上下颠倒问题
flutter
Pedro1 天前
Flutter - 多版本管理工具FVM
flutter
未来猫咪花1 天前
保持 Widget.build 内部的纯净
flutter·dart
初遇你时动了情2 天前
uniapp/flutter中实现苹果IOS 26 毛玻璃效果、跟随滑动放大动画
flutter·ios·uni-app