自渲染方案
利用 Skia 重新实现渲染管线,不依赖原生组件
Flutter
Flutter 是 Google 的开源应用开发框架,仅通过一套代码库
就能构建精美的,原生平台编译的多平台应用
技术优势
-
编写一次,即可部署各终端:Web,Android/iOS,mac/Linux/windows
-
速度快,使用本机 ARM 二进制文件, 提前编译,不像 Android APP 需要 JVM 调用 Java 再调用 Skia
-
界面像一款全屏应用程序,或 2D 游戏
原理
通过 Dart 语言构建一套跨平台的开发组件,所有组件基于 Skia 引擎自绘,在性能上可以和 Native 平台的 View 相媲美。
Fluter 站在前人的肩膀上,参考了 React 的状态管理、Web 的自绘制 Ul、React Native 的 HotReload 等特点,
同时考虑了与 Native 通信的 Channel 机制、自渲染、完备的开发工具链,
Fluter 与上述 Recat Native、WebView 容器本质上都是不同的,它没有使用 WebView、javaScript 解释器或者系统平台自带的原生控件,而是有一套自己专属的 Widget,底层渲染使用自身的高性能 C/C++ 引擎自绘。
对于底层操作系统而言,Fluter 应用程序的包装方式与其他原生应用相同。在每一个平台上,会包含一个特定的嵌入层,从而提供一个程序入口,程序可以与底层操作系统进行协调,访问诸如 surface 渲染、辅助功能和输入等服务,并且管理事件循环队列。
该嵌入层采用了适合当前平台的语言编写,例如 Android 使用的是 Java 和 C++, i0S 和 macOS 使用的是 Obiective-C 和 Obiective-C++,
Windows 和 Linux 使用的是 C++。Flutter 代码可以通过嵌入层,以模块方式集成到现有的应用中,也可以作为应用的主体。
Flutter 本身包含了各个常见平台的嵌入层,同时也,存在一些其他的嵌入层。
Fluter 引擎
毫无疑问是 Fluter 的核心,它主要使用 C++编写,并提供了 Fluter 应用所需的原语。当需要绘制新一帧的内容时,引擎将负责对需要合成的场景进行栅格化。它提供了 Flutter 核心 API 的底层实现、包括图形(通过 skia)、文本布局、文件及网络 、辅助功能支持、插件架构和 Dart 运行环境及编译环境的工具链。
引擎将底层 C++代码包装成 Dart 代码,通过 dart:ui 暴露给 Fluter 框架层。该库暴露了最底层的原语,包括用于驱动输入、图形、和文本渲染的子系统的类。
通常、开发者可以通过 Fluter 框架层 与 Fluter 交互,该框架提供了以 Dart 语言编写的现代响应式框架。它包括由一系列层组成的一组丰富的平台,布局和基础库。从下层到上层,依次有:
-
基础的 foundational 类及一些基层之上的构建块服务,如 animation、 painting 和 gestures,它们可以提供上层常用的抽象。
-
渲染层 用于提供操作布局的抽象。有了渲染层,你可以构建一棵可渲染对象的树。在你动态更新这些对象时,渲染树也会自动根据你的变更来更新布局。
-
widget 层是一种组合的抽象。每一个渲染层中的渲染对象,都在 widgets 层中有一个对应的类。此外,widgets 层让你可以自由组合你需要复用的各种类。响应式编程模型就在该层级中被引入。
-
Material 和 Cupertino 库提供了全面的 widgets 层的原语组合,这套组合分别实现了 Material 和 i0S 设计规范,
Fluter 框架相对较小,因为一些开发者可能会使用到的更高层级的功能已经被拆分到不同的软件包中,使用 Dart 和 Flutter 的核心库实现,其中包括平台插件,例如 camera 和 webview;与平台无关的功能,例如 characters、htp 和 animations。还有一些软件包来自于更为宽泛的生态系统中,例如 应用内支付、 Apple 认证 和 Lottie 动画。