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。
相关推荐
恋猫de小郭1 天前
Amper 正式转正 Kotlin Toolchain ,Gradle 未来何去何从
android·前端·flutter
张风捷特烈1 天前
Flutter 类库大揭秘#02 | path_provider 各平台实现
前端·flutter
TT_Close2 天前
别劝退了!5秒搞定 Flutter 鸿蒙 FVM 起跑线
flutter·harmonyos·visual studio code
你听得到112 天前
用户说 App 卡,但说不清在哪?我把 Flutter 监控 SDK 升级成了链路观测工作台
前端·flutter·性能优化
stringwu4 天前
Flutter 开发必备:MVI 架构的高效实现指南
前端·flutter
程序员老刘5 天前
Flutter版本选择指南:3.44系列继续观望 | 2026年6月
flutter·ai编程·客户端
用户965597361906 天前
Provider vs Bloc vs GetX vs Riverpod:Flutter 状态管理方案怎么选?
flutter
恋猫de小郭6 天前
Flutter Patchwork,不用 Fork 改依赖包源码的第三方工具
android·前端·flutter
程序员老刘7 天前
跑分第一的编程大模型,我为啥不用?
flutter·ai编程·vibecoding
恋猫de小郭7 天前
苹果 AirPods 协议,Android 也可以使用完整版 AirPods 能力
android·前端·flutter