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