前言
随着flutter正式版本的发布,flutter被越来越的人关注。flutter是Google推出的移动应用开发框架,使用Dart语言开发,一套代码可以同时在iOS和Android平台上运行。
Flutter框架结构
我们看下flutter官方提供的一张框架图:屏幕快照 2019-05-16 下午3.01.00.png
Flutter Framework
这是一个纯Dart实现的SDK.
- 底下两层(Foundation和Animation、Painting、Gestures)在Google的一些视频中被合并为一个dart UI层,对应的是Flutter中的dart:ui包,它是Flutter引擎暴露的底层UI库,提供动画、手势及绘制能力。
- Rendering层,这一层是一个抽象的布局层,它依赖于dart UI层,Rendering层会构建一个UI树,当UI树有变化时,会计算出有变化的部分,然后更新UI树,最终将UI树绘制到屏幕上,这个过程类似于React中的虚拟DOM。Rendering层可以说是Flutter UI框架最核心的部分,它除了确定每个UI元素的位置、大小之外还要进行坐标变换、绘制(调用底层dart:ui)。
- Widgets层是Flutter提供的的一套基础组件库,在基础组件库之上,Flutter还提供了 Material 和Cupertino两种视觉风格的组件库。我们Flutter开发的大多数场景,只是和这两层打交道。
Flutter Engine
这是一个纯 C++实现的 SDK,其中包括了 Skia引擎、Dart运行时、文字排版引擎等。在代码调用 dart:ui库时,调用最终会走到Engine层,然后实现真正的绘制逻辑。
Dart开发
当我们写完 Dart 代码后,需要编译后才能给客户端使用。Flutter 的产物分为两种模式:
- 一个是 Debug 模式,采用 JIT(Just In Time)的方式,类似于解释型语言,好处是可以支持热更新,方便调试。
- 另一种是 AOT(Ahead Of Time)模式,类似于编译型语言,好处是性能比较好。
产物
因此在开发中,我们一般使用 Debug 模式的产物来提升调试效率,正式上线后再换成 Release 模式获得极致的性能。不管是哪种模式,在 iOS 下的产物都是三个(安卓类似):
- App.framework:和 flutter 的业务逻辑相关,在 Debug 模式下就是一个很小的空壳,在 Release 模式下包含全部业务逻辑。
- flutter_assets:也和 flutter 的业务逻辑相关,在 Debug 模式下包含全部业务逻辑,在 Release 模式下很小。
- Flutter.framework:实现 Flutter 框架自己的逻辑。
最后
由于Flutter现在暂不支持热更新,所以我们只是小范围打样,并不能替代现有项目的H5实现方式。
感谢参考:
Flutter中文网