温故知新-WidgetsBinding

WidgetsBinding

它是widget层与Flutter引擎的粘合剂,管理着以`rootElement`为根的单一`Element`树, 调用 `runApp`(间接调用 `attachRootWidget`)会创建该`rootElement`

WidgetsBinding中有一个重要的字段BuildOwner,它负责widget层的构建和更新,在此binding中初始化且设置onBuildScheduled回调。

所有widget的BuidlerOwner都是此_buildOwner,在创建rootElement时赋值给根节点,然后通过根节点传递下去(element执行mount的时候,_owner = parent.owner,_parentBuildScope = parent.buildScope),一同传递下去的还有BuildScope

js 复制代码
void initInstances() {
    super.initInstances();
    _instance = this;
    _buildOwner = BuildOwner();
    buildOwner!.onBuildScheduled = _handleBuildScheduled;
    ......
  }
  void _handleBuildScheduled() {
    ensureVisualUpdate();
  }
  
  void attachToBuildOwner(RootWidget widget) {
    final bool isBootstrapFrame = rootElement == null;
    _readyToProduceFrames = true;
    _rootElement = widget.attach(buildOwner!, rootElement as RootElement?);
    if (isBootstrapFrame) {
      SchedulerBinding.instance.ensureVisualUpdate();
    }
  }

BuidlerOwner记录所有被标记的脏元素列表,在下一帧执行drawFrame时,调用buildOwner.buildScope方法时重新buildelement元素。
super.drawFrame(); 会调用RendererBindingdrawFrame去启动PipelineOwner重新绘制UI。

js 复制代码
@override
  void drawFrame() {
    TimingsCallback? firstFrameCallback;
    ......
    try {
      if (rootElement != null) {
        buildOwner!.buildScope(rootElement!);
      }
      super.drawFrame();
      buildOwner!.finalizeTree();
    } finally {
      assert(() {
        debugBuildingDirtyElements = false;
        return true;
      }());
    }
  }
相关推荐
程序员老刘12 小时前
Dart Skills CLI 1.0发布,老刘年初的预言兑现了
flutter·ai编程·dart
天空之城--17 小时前
Flutter UI 绘制原理浅析
flutter
yume_sibai21 小时前
01-Flutter入门指南
flutter
lqj_本人1 天前
Flutter 三方库「flutter_ble_peripheral」的鸿蒙化适配指南
flutter·华为·harmonyos
lqj_本人1 天前
Flutter 三方库「flutter-dualscreen」的鸿蒙化适配指南
flutter·华为·harmonyos
●VON2 天前
鸿蒙跨平台框架怎么选?从真实需求比较 Flutter、React Native、KMP/CMP 与 Web 路线
flutter·react native·harmonyos
lqj_本人2 天前
Flutter 三方库「flutter_displaymode」的鸿蒙化适配指南
flutter·华为·harmonyos
lqj_本人2 天前
Flutter 三方库「drag_and_drop_flutter」的鸿蒙化适配指南
flutter·华为·harmonyos
天空之城--2 天前
Flutter 三棵树:原理、机制与最佳实践
flutter
天空之城--2 天前
Flutter线程模型完全指南:从架构到实战
flutter·架构