当前位置: 首页 > news >正文

Flutter整体框架

       

        Flutter整体框架由三部分组成:Framework、Engine和Embedder。

       Framework

        Framework提供了一个用 Dart 语言编写的现代、反应式框架,由许多抽象的层级组成。它包括一套丰富的布局、动画、绘制、手势UI组件及配套代码,以及更基础的异步、文件、ui等基础服务。

        Framework最顶端是各种Widgets。包括我们经常用到的 Material 和 Cupertino两种风格的Widget以及下面的不带明确风格的Widgets。比如:UI/文本/图片/按钮等基础 Widgets。 在 Widget 层下面,你会发现 Rendering 层。

        再往下是RenderObject。其会被上层的Flutter Widgets调用来实现其布局和后台的绘制。Rendering tree 中的所有 RenderObjects 都会被Flutter分层和绘制。不过,大多数情况下, 你会发现 Flutter中我们想要实现自定义的绘制逻辑,主要是使用CustomPaint或RenderObject的子类RenderBox ,而不是直接使用RenderObject。因为封装一个全新的RenderObject是相当麻烦的,我们必须去实现layout、绘制和命中测试逻辑。

        dart:ui 是框架的最底层,它负责处理与 Engine 层的交流沟通,以及一些对Flutter开发的基础抽象。 此部分的核心代码是: flutter 仓库下的flutter package,以及 sky_engine 仓库下的 io, async, ui等package。

       Engine

        Engine大部分是用C++实现的,其提供了Flutter核心API的底层实现。包括 Dart 运行时、编译工具链,以及图形(通过Skia)、文本布局、文件和网络I/O、可访问性支持、插件架构等等,是连接框架和系统(Andoird/iOS)的桥梁。

        Engine通过dart:ui暴露给Flutter框架,它将底层的C++代码封装在Dart类中。这个库暴露了最底层的基元,例如用于驱动输入、图形和文本渲染子系统的类。

        Dart 部分主要包括:Dart Runtime,Garbage Collection(GC)以及Debug模式下的JIT支持。

        Skia是开源的二维图形库,提供了适用于多种软硬件平台的通用API。

        Text 即文本渲染,其使用Skia作为渲染后端,在Android和Fuchsia上使用FreeType渲染,在iOS上使用CoreGraphics来渲染字体。

       Embedder

        Embedder 负责与底层操作系统协调,以访问服务,如渲染表面、可访问性和输入,并管理线程及消息事件循环。

        Embedder提供初始化 Flutter 引擎的入口,使Flutter 代码可以作为一个模块集成到现有的应用程序中,或者作为应用的主要模块。

        Embedder会获取 UI 和栅格化线程,创建 Flutter 可以写入的纹理。

        Embedder层同时负责管理应用的生命周期,包括输入的操作(例如鼠标、键盘和触控)、窗口大小的变化、线程管理和平台消息的传递等等。

http://www.lryc.cn/news/311704.html

相关文章:

  • JVM堆内存中新生代晋升到老年代的条件
  • 前端监控为什么采用GIF图片做埋点?
  • webstorm 创建运行纯Typescript项目
  • GO-接口
  • 【C语言】动态内存管理常用函数
  • 【OpenGL】(1) 专栏介绍:OpenGL 库 | 3D 计算机图形应用 | GPGPU 计算 | 3D 建模和 3D动画 | 渲染技术介绍
  • SPI总线知识总结
  • 【异常关闭clas*h,导致无法访问任何网页_解决办法】
  • STL-map和set
  • [蓝桥杯 2020 省 B1] 整除序列
  • 【Android】View 的滑动
  • 基于ZYNQ的PCIE高速数据采集卡的设计(一)
  • 渗透测试工具 nmap 详解
  • Ubuntu下安装Scala
  • 无法启动报,To install it, you can run: npm install --save @/components/iFrame/index
  • 深入理解现代JavaScript:从语言特性到应用实践
  • ThreadPoolExecutor 学习
  • 深入理解计算机操作系统书籍阅读感悟(一)
  • 使用query请求数据出现500的报错
  • PostgreSQL教程(二十一):服务器管理(三)之服务器设置和操作
  • Linux运维_Bash脚本_编译安装GNU-Tools
  • leetcode 121.买卖股票的最佳时机
  • javaWebssh酒店客房管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计
  • vue3基础教程(2)——创建vue3+vite项目
  • 部署DNS 实战篇
  • 2023 2024年全国职业院校技能大赛中职组网络建设与运维赛项服务器Linux部分教程解析
  • Flask g对象和插件
  • 26、Qt调用.py文件中的函数
  • 计算机网络实验一 网线制作
  • android TextView 实现富文本显示