1.2 Flutter框架
和原生Android、iOS系统一样,Flutter框架也是分层的结构,每一层都建立在前一层的基础之上,并且上层比下层的使用频率更高,官方给出的Flutter框架如图1-2所示。
图1-2 Flutter框架
由图可知,Flutter框架自下而上分为Embedder层、Engine层和Framework层。其中,Embedder是操作系统适配层,实现了渲染Surface设置、线程设置,以及平台插件等平台相关特性的适配;Engine层负责图形绘制、文字排版,Engine层具有独立虚拟机,正是由于它的存在,Flutter程序才能运行在不同的平台上,实现跨平台运行;Framework层则是使用Dart编写的一套基础视图库,包含了动画、图形绘制和手势识别等功能,是使用频率最高的一层。
1.2.1 Flutter Framework
Flutter Framework是一个由Dart实现的软件开发工具包(Software Development Kit,SDK),它提供了一整套自下向上的基础库。下面按照自下向上的顺序,对Framework层进行简单的介绍。
- 底下两层:在Framework层中,Foundation、Animation、Painting、Gestures被合并为Dart UI层,对应Flutter中的dart:ui包,它是Flutter引擎暴露的底层UI库,提供动画、手势识别及图形绘制功能。
- Rendering层:抽象的布局层,负责构建UI对应的树结构。当UI树上的元素发生变化时,它会计算出有变化的部分并更新UI树,最终将UI树绘制到屏幕上展示给用户,整个过程类似于React中的虚拟文档对象模型(DOM)。
- Widgets层:Flutter在基础组件库之上,还提供了Material和Cupertino两种视觉风格的组件库。
在平时的应用开发中,与开发者打交道最多的就是Widgets层,并且在大多数情况下,官方提供的UI组件库即可满足应用的页面开发需求。
1.2.2 Flutter Engine
Flutter Engine是一个由C/C++实现的软件开发工具包(SDK),是Flutter的引擎,主要由Skia引擎、Dart运行时和文字排版引擎构成。当Framework层调用dart:ui包时,最终都会走到Engine层,然后由Engine层实现真正的绘制逻辑。
1.2.3 Flutter Embedder
Embedder是Flutter的操作系统适配层,又称为嵌入层,通过该层可以把Flutter嵌入不同的平台。Embedder的主要工作包括设置、线程设置、事件循环以及插件的平台适配等。
通常,平台(Android、iOS等)只提供一个渲染容器,剩下的所有渲染工作则在Flutter框架内部完成。正是由于Embedder的存在,Flutter才具备了跨端应用开发的一致性。