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。
相关推荐
末代iOS程序员华仔14 小时前
iOS 5.6 条例解决方法
flutter·ios·swift
末代iOS程序员华仔20 小时前
Guideline 5.6 - Developer Code of Conduct
flutter·ios·swift
恋猫de小郭21 小时前
聊个比较有意思的 Flutter Web 问题
android·前端·flutter
2501_915918411 天前
Flutter项目配置iOS混淆的详细步骤与工具推荐
android·flutter·ios·小程序·uni-app·cocoa·iphone
天空之城--1 天前
过去一周Android行业动态:编码技术与综合趋势精选
android·flutter·性能优化·kotlin·android jetpack
Flutter OH2 天前
Flutter OH平台 DFX 问题定位导航
flutter
恋猫de小郭2 天前
AI 时代,也许你的 Flutter 需要一套 Dartastic OpenTelemetry 监控
android·前端·flutter
等....2 天前
Flutter创建
flutter
Privasa-隐私实验室2 天前
跨端技术选型|Flutter搭建隐私加密App,安卓与iOS双端差异适配实战
android·笔记·安全·flutter·ios·隐私安全·aes-256
Flutter OH2 天前
Flutter OH 外接纹理问题定位指南
flutter