框架图

整个Flutter系统由三部分组成,由上至下依次为:Framwork(动态库),Engine(渲染引擎),Embedder(嵌入层)。

Framwork(动态库)

Framework 层全部使用Dart 编写,它实现了一套基础库,用于处理动画、绘图和手势,并且封装了一套UI组件库,并预写了Android(MaterialDesign)和 iOS的(Cupertino)风格的UI,这个纯Dart实现的SDK被封装为了一个叫作dart:ui的Dart库,极大方便了开发移动端。

  • Material
    封装了各种安卓风格的组件

  • Cupertino
    为iOS风格组建集合

  • Widgets
    各种widget组件的组合。flutter核心思想为“一切皆widget”,各种小组件之间进行相互组合来共同构建不同的用户界面。Flutter中widget可以是一个Text,也可以是Color,同样也可以是Container。

    widget类继承关系

  • Rendering
    Rendering是一个界面的渲染库,在Flutter中界面的渲染主要包括三个阶段:布局(Layout),绘制(Painting),合成(Composite)

  • Animation
    Animation是一个动画相关类,可以通过这个类创建一些基础的动画,补间动画(Tween Animation),类似于Android中的ValueAnimator和iOS中的Core Animation

  • Painting
    Painting封装了来自Engine层的绘制接口

  • Gesture
    处理手势动作和手势相关交互

  • Foundation
    底层框架,定义底层工具类和方法,提供其他层使用

Engine(引擎)

Engine是Flutter引擎,引擎主要负责图形绘制(Skia)、文字排版(libtxt)和提供Dart运行时,引擎全部使用C++ 实现,它是dart的一个运行时,它可以以JIT、JIT Snapshot或者AOT的模式运行Dart代码

  • Skia
    Skia是一个谷歌出品的开源二维图形库,提供常用的API,并且可以在多种软硬件平台上运行。和其他跨平台方案不同Flutter没有使用原生的UI 和 绘制框架,以此来保证Flutter的高性能体验

  • Dart在 JIT模式下,速度与 JavaScript基本持平。但是 Dart支持 AOT,当以 AOT模式运行时,JavaScript便远远追不上了。速度的提升对高帧率下的视图数据计算很有帮助。

Dart 语言特征 :
语言类型 : 强类型语言 ;
编译类型 : JIT 即时编译 ; ( 编译类型有 JIT / AOT 两种类型 )
JIT 即时编译 : 即时编译 , 在程序运行时一边解释一边运行 ;
1,运行时效率较低
2,可移植性强
AOT 静态编译:静态编译 , 在开发时就要将代码编译成机器码 ;
1, 运行时效率高
2, 不可移植

Embedder(嵌入层)

主要作用是考虑不同平台的特性将Flutter嵌入其中,其中主要负责的工作有:

  • Render Surface Setup(渲染设置)
  • Native Plugins(插件管理)
  • Packaging(打包)
  • Thread Setup(线程管理)
  • Event Loop Interop(事件循环的交互)

本文地址:https://blog.csdn.net/qq_18133317/article/details/107596956