Flutter 源码阅读
Flutter 是一个跨平台的 UI 开发框架,支持移动端,web 以及桌面端。它的优势在于快速开发,并且对平台的支持好,移动端支持已成熟,iOS 和 Android 上的许多 Bug 也已修复。关于 Flutter 的优劣对比,详见参考资料中的 Flutter 入门文档。
写这篇文章时,主要关注的桌面端 widnows 和 macOS 仍然不支持直 接构建原生运行的 arm64 target,二者均会在 arm 机器上以 x86_64 模拟的方式运行。
关于 arm64 的支持,详见官方 github 的 issue:
- macOS:https://github.com/flutter/flutter/issues/60113
- Windows:https://github.com/flutter/flutter/issues/62597
相关的支持仍然在实现过程中,新产品开发时,需要关注原生支持情况,如果在底层逻辑上可以使用 rust 开发,结合 UI Flutter 也是一种方式,UI 的转译性能有待探索。
回到正题,源码阅读的目的:
- 理清 Flutter 结构,包括:
- Flutter Framework 层的运行原理
- Engine 层运行原理
- Embedder 层运行原理
- UI 层开发时知道如何利用 Framework 的特点进行开发
- 利用 Engine 的特性实现一些特殊能力,有待探索。
关注的主题
- widget,element,renderobject 三棵树
- layer 的存在是为了便于隔离和重用已绘制内容,提高性能,具体要看看,另外可以单独隔离一部分界面描述到单独的 layer 以便将变化部分隔离以更提升性能。(RepaintBoundary)
- engine 驱动 framework 的流程,帧绘制和动画执行。
在分析时,从特殊到一般的过程进行分析,找出具体特定的场景的执行行为,而后总结完整流程。
单层 widget 和多层 widget 的情况下:
- 首次加载
- 更新 Widget
- 包含动画的场景
参考资料
- Flutter 入门文档:https://book.flutterchina.club/preface.html