Flutter开发之初识Flutter

138 阅读2分钟

Flutter整体结构图

image.png

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优点

  1. 性能强大,流畅
  2. 优秀的路由设计
  3. 单例模式
  4. 优秀的动画设计
  5. 跨多种平台,减少开发成本;支持插件,可以访问原生系统的调用
  6. Dart语言更具优势

Flutter缺点

  1. 无法脱离原生,开发人员需具备原生开发基础
  2. 适配问题,开发工具版本升级后,修改量大
  3. 原生集成第三方SDK后,兼容性适配是个令人头痛的问题
  4. 代码可读性较差,对代码质量和管理要求较高
  5. Widget的类型难以选择,糟糕的UI控件API
  6. Flutter packages和Dart packages上第三方sdk繁杂,适配性差,不可乱用
  7. 目前几乎没有第三方开发者平台开发Flutter能力的SDK,需要原生去集成
  8. 打包后,apk/ipa要大很多