Flutter整体结构图
Flutter Framework
Foundation、Animation、Painting、Gestures被合成了一个Dart UI层,对应的是Flutter中 dart:ui包,是Flutter引擎暴露的底层UI库,主要提供动画、手势、绘制能力。
Rendering层是一个抽象布局层,依赖于Dart UI层,Rendering层会构建一个UI树、当UI树有变化时,会计算出有变化的部分,然后更新UI树,最终绘制在屏幕上。
Widgets层是Flutter提供的一套基础组件库。
Material、Cupertino是Flutter提供了两种视觉风格的组件库 (Android、iOS)。
Flutter Engine
这是一个纯C++实现的SDK,主要执行相关的渲染、线程管理、平台事件等操作。其中包括了Skia引擎、Dart运行时、文字排版引擎等,在调用 dart:ui 库时,其实最终会走到Engine层,实现真正的绘制逻辑。
Flutter Embedder
提供四个Task Runner,将引擎一直到平台中间层代码的渲染设置、原生插件、打包、线程管理、时间循环、交互操作等。
- UI Runner:负责绑定渲染相关操作
- GPU Runner:用户执行GPU指令
- iOS Runner:处理图片数据、为GPU做准备的
- Platform Runner:所有接口调用都使用该接口
Flutter优缺点对比
Flutter优点
- 性能强大,流畅
- 优秀的路由设计
- 单例模式
- 优秀的动画设计
- 跨多种平台,减少开发成本;支持插件,可以访问原生系统的调用
- Dart语言更具优势
Flutter缺点
- 无法脱离原生,开发人员需具备原生开发基础
- 适配问题,开发工具版本升级后,修改量大
- 原生集成第三方SDK后,兼容性适配是个令人头痛的问题
- 代码可读性较差,对代码质量和管理要求较高
- Widget的类型难以选择,糟糕的UI控件API
- Flutter packages和Dart packages上第三方sdk繁杂,适配性差,不可乱用
- 目前几乎没有第三方开发者平台开发Flutter能力的SDK,需要原生去集成
- 打包后,apk/ipa要大很多