Flutter框架机制详解
一、核心思想:响应式框架与自绘渲染
Flutter 的成功主要基于两个核心思想:
-
响应式编程
-
Flutter 的 UI 构建方式深受 React 等现代前端框架的影响。其核心思想是:UI = f(state)。
-
开发者描述当前状态下的 UI 应该是什么样子(通过
Widget树)。当状态(State)发生变化时,Flutter 会重新调用这个“函数”(即build方法),生成一个新的 Widget 树。 -
框架会智能地对比新旧两棵树之间的差异,并仅将变更部分应用到底层的渲染对象上,最终更新屏幕。这个过程称为 “ Reconciliation ”(协调)或“ Diff ”(差异比对)。
-
-
自绘渲染
-
这是 Flutter 与大多数其他跨平台框架(如 React Native、Weex)最根本的区别。
-
传统方案:通过 JavaScript 桥接器调用原生组件(如 Android 的
TextView, iOS 的UILabel)。这存在性能瓶颈和平台一致性难题。 -
Flutter 方案:自己实现了一套完整的渲染流水线。Flutter App 直接在 Canvas 上绘制 UI,完全绕开了原生的 UI 组件。它通过 Skia 图形引擎(Android、Web 等默认使用)或 Impeller(iOS 默认使用)直接向 GPU 发送绘图指令。
-
优势:
-
高性能:避免了 JavaScript 桥接的异步通信开销,动画和滚动非常流畅。
-
高度一致性:同一套代码在所有平台上看起来和用起来都一模一样,没有“平台特性”带来的样式差异。
-
极致的自定义能力:由于是自绘,任何 UI 效果都可以实现,不受原生组件能力的限制。
-
-
二、架构分层
Flutter 的架构清晰地分为三层,从下至上分别是:
1. Embedder(嵌入层)
-
职责:这是 Flutter 与特定操作系统对接的“胶水层”。它负责:
-
渲染表面的管理(
Surface)。 -
原生插件(Plugin)的接入。
-
消息循环(Event Loop)的集成。
-
线程管理(主线程、UI 线程、IO 线程等)。
-
-
平台特定:嵌入层是用对应平台的语言编写的(Android 上用 Java/Kotlin,iOS 上用 Objective-C/Swift,Windows 上用
