Skip to main content

Flutter 源码阅读

Flutter 是一个跨平台的 UI 开发框架,支持移动端,web 以及桌面端。它的优势在于快速开发,并且对平台的支持好,移动端支持已成熟,iOS 和 Android 上的许多 Bug 也已修复。关于 Flutter 的优劣对比,详见参考资料中的 Flutter 入门文档。

写这篇文章时,主要关注的桌面端 widnows 和 macOS 仍然不支持直接构建原生运行的 arm64 target,二者均会在 arm 机器上以 x86_64 模拟的方式运行。

关于 arm64 的支持,详见官方 github 的 issue:

相关的支持仍然在实现过程中,新产品开发时,需要关注原生支持情况,如果在底层逻辑上可以使用 rust 开发,结合 UI Flutter 也是一种方式,UI 的转译性能有待探索。

回到正题,源码阅读的目的:

  1. 理清 Flutter 结构,包括:
    • Flutter Framework 层的运行原理
    • Engine 层运行原理
    • Embedder 层运行原理
  2. UI 层开发时知道如何利用 Framework 的特点进行开发
  3. 利用 Engine 的特性实现一些特殊能力,有待探索。

关注的主题​

  1. widget,element,renderobject 三棵树
  2. layer 的存在是为了便于隔离和重用已绘制内容,提高性能,具体要看看,另外可以单独隔离一部分界面描述到单独的 layer 以便将变化部分隔离以更提升性能。(RepaintBoundary)
  3. engine 驱动 framework 的流程,帧绘制和动画执行。

在分析时,从特殊到一般的过程进行分析,找出具体特定的场景的执行行为,而后总结完整流程。

单层 widget 和多层 widget 的情况下:

  1. 首次加载
  2. 更新 Widget
  3. 包含动画的场景

参考资料​

  1. Flutter 入门文档:https://book.flutterchina.club/preface.html