- Flutter从0基础到App上线
- 萧文翰
- 682字
- 2021-03-27 01:49:28
1.3 Flutter的体系结构
Flutter的分层框架结构图如图1.4所示。
图1.4 Flutter的分层框架结构图
从图1.4中我们可以看到,Flutter是一个分层结构框架,每一层都建立在其上一层的基础上。它主要包括三大层级,分别是Framework(框架层)、Engine(引擎层)和Embedder(嵌入层),其中App都是基于Framework开发并运行在Engine层上的。
Framework层使用Dart实现,它包含了所有和UI相关的组件、动画、手势等。
Engine层使用C/C++实现,主要涵盖了Skia,Dart和Text。其中,Skia是开源的图形库,提供适用于多种软硬件平台的API;Dart层包含了在Dart运行时的垃圾收集、JIT编译(Just In Time动态即时编译,用于Debug模式)、AOT编译(Ahead Of Time静态提前编译,用于Release/Profile模式);Text则负责文本渲染。
Embedder层能确保各平台的兼容性。在Android和iOS平台上,Embedder层负责将上层完美地嵌入到它们中。而上层只提供画布,所有内容的绘制渲染逻辑均在Flutter内部完成,这实现了Flutter App和平台的无关性。
Flutter内部的绘制渲染是整个Flutter跨平台技术的核心。它直接使用Skia引擎来渲染每个组件,既摆脱了对浏览器的束缚,又摆脱了和平台密切相关的原生控件。由于Flutter对Android和iOS平台都是采用AOT编译的方式,因此确保了使用Flutter开发技术的App都能够使用本机指令集运行。换言之,这一设计既满足了所谓统一的应用开发体验,又确保了App的运行性能。
在实际开发过程中,我们经常用到的是位于最上层层级提供的功能。例如,Material和Cupertino分别对应Android和iOS的UI设计风格,它们都使用了Widgets层的控件,只不过是做了很多的搭配组合。同样,我们也可以混搭各种Widgets来实现自定义控件。类似地,Widgets层也是依赖Rendering层来构建的。
如果其中某一层无法满足项目需求,也可以使用更下一层的能力来自定义。如此灵活的层级结构满足了多种需求,也正是这一点吸引了更多开发者纷纷投入Flutter的怀抱。