问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Flutter绘制原理与Flutter基本框架

发布网友 发布时间:2天前

我来回答

1个回答

热心网友 时间:2024-10-04 06:49

关于图像的显示

不管是手机、电脑还是电视,我们在屏幕上可以看到的所有内容都是计算机绘制出来的图像。把相关图片连续播放就会产生动画效果,比如下面的小黄鸭的动画效果

将这个小黄鸭的动画拆解出来,其实就是很多张图片

关于图片显示的整个过程有俩个相关概念

帧率(fps):每秒钟显示多少帧,也可以理解为每秒钟显示多少画面

刷新率:显示器在一秒内刷新的次数,比如iPhone的刷新频率是60Hz,每秒刷新60次

帧率和刷新率的关系

在计算机中,CPU、GPU和显示器以一种特定的方式协作

将数据传递给CPU,CPU进行处理

CPU将处理好的显示内容提交给GPU

GPU渲染后放入帧缓冲区

视频控制器按照VSync信号从帧缓冲区取出帧数据传递给显示器显示

想要了解VSync信号原理可以看这篇文章AndroidVsync原理简析

Flutter绘制原理

Android、iOS、Flutter的UI渲染过程都一样,在整个Flutter架构中,Flutter只关心向GPU提供显示数据,不用关心显示屏、视频控制器以及GPU是如何工作的

绘制流程

GPU收到VSync信号后通知UI线程

UI线程用Dart来构建图层树

图层树在GPU线程进行合成

合成后的视图数据提供给Skia引擎

Skia引擎通过OpenGL或者Vulkan将显示内容提供给GPU

关于Skia引擎

Skia(SkiaGraphicsLibrary)是一个由C++编写的开源图形库

在Flutter中,Skia就是向GPU提供数据的途径

Skia目前是Android官方的图像渲染引擎,因此,FlutterAndroidSDK无需内嵌Skia引擎就可以获得Skia支持

对于iOS来说,由于Skia是跨平台的,它作为FlutteriOS的渲染引擎被嵌入到Flutter的iOSSDK中,替代了iOS平台本身的CoreGraphics/CoreAnimation/CoreText,所以,FlutteriOS打包成api时体积会比Android大一些

由于Android和iOS底层都是使用Skia引擎,所以底层渲染能力统一了,上层开发接口及功能体验也保持了一致

Flutter和ReactNative的本质区别

ReactNative之类的框架,只是通过JavaScript虚拟机扩展调用系统组件,最终由Android和iOS系统进行组件渲染

Flutter是自己完成了组件渲染的闭环

Flutter基本框架

Flutter框架分为三层:Framework、Engin、Embedder

Framework

FlutterFramework是一个纯Dart实现的SDK。它实现了一套基础库,用于处理动画、绘图和手势。并且基于绘图封装了一套UI组件库,然后根据Material(Android风格)和Cupertino(iOS风格)两种视觉风格区分开来。这个纯Dart实现的SDK被封装为了一个叫作dart:ui的Dart库。我们在使用Flutter写App的时候,直接导入这个库即可使用组件等功能。

Engin

FlutterEngine是一个纯C++实现的SDK。囊括了Skia引擎、Dart运行时、文字排版引擎等。它是Dart的一个运行时,它可以以JIT、JITSnapshot或者AOT的模式运行Dart代码。这个运行时还控制着VSync信号的传递、GPU数据的填充等,并且还负责把客户端的事件传递到运行时中的代码

Embedder

是一个嵌入层,即把Flutter嵌入到各个平台上去,这里做的主要工作包括渲染Surface设置,线程设置,以及插件等。这里可以看出,Flutter的平台相关层很低,平台只是提供一个画布,剩余的所有渲染相关的逻辑都在Flutter内部,这就使得它具有了很好的跨端一致性

原文:https://juejin.cn/post/7103762668808306724
Flutter绘制原理与Flutter基本框架

Flutter是自己完成了组件渲染的闭环 Flutter基本框架 Flutter框架分为三层:Framework、Engin、Embedder Framework FlutterFramework是一个纯Dart实现的SDK。它实现了一套基础库,用于处理动画、绘图和手势。并且基于绘图封装了一套UI组件库,然后根据Material(Android风格)和Cupertino(iOS风格)两种视觉风格区分开来。

三、Flutter的渲染机制之RenderObjectWidget、RenderObjectElement...

RenderObjectWidget 是 Widget 例如 SizeBox , Column 等 RenderObjectElement 是这类 Widget 生成的 Element 类型, 例如 SizeBox 对应 SingleChildRenderObjectElement (单子节点的 Element )RenderObject 才是真正负责绘制的对象,其中包含了 paint , layout 等方法~Text 组件为例: class Text exte...

Flutter系列文章-Flutter环境搭建和Dart基础

1. 下载Flutter SDK并解压至指定路径,注意不要将flutter安装到高权限路径。2. 设置环境变量,将Flutter的bin目录添加到PATH中。3. 选择IDE,推荐使用VS Code或Android Studio,安装Flutter和Dart插件。4. 运行flutter run命令,创建并运行第一个Flutter项目。5. 遇到问题时,使用“flutter doctor”检查并...

FlutterUI渲染原理概览

在Flutter中Widget是核心,一切都是Widget,但一起协同工作的还有另外两个元素:Element和RenderObject。由于它们都是有着树形结构,所以经常会称它们为三棵树。Widget 在开发Flutter应用过程中,接触最多的无疑就是Widget,是『描述』FlutterUI的基本单元。Flutter在widgets层中使用了相同的概念(一个Widget)来表示屏幕上的绘制...

Flutter入门——页面布局

在Flutter中,Flex布局是一种灵活的布局方式,可以帮助我们创建响应式和动态布局。Flex布局通过`Column`和`Row`组件来实现,它们可以根据主轴和交叉轴的属性进行布局调整。主轴决定了组件的排列方向,交叉轴则垂直于主轴,决定组件在垂直方向上的排列。`Column`和`Row`组件提供了多种对齐方式,如`mainAxis...

Flutter必备 | Flex布局完全解读

在Flutter布局体系中,Flex、Row和Column是核心组件,它们位于widgets包的基本文件中,共同构成了多子组件布局的基础。Flex布局提供了一系列属性,包括轴向、主轴方向、交叉轴方向、主轴尺寸、文字方向、竖直方向排序、基线对齐方式,以及与Flexible组件的配合。通过这些属性,开发者可以灵活地控制组件的排列方式,...

FlutterWidget原理解读(一)

暂时可以简单的理解,FLutter最终绘制在设备上的显示元素,都是通过Widget配置出来的。 在web前端开发中,我们知道浏览器页面由HTML+CSS+JS配置而成,其中HTML负责配置UI结构,CSS负责配置UI样式,JS负责UI的交互。 而在Flutter中,无论是UI结构,还是UI样式,再到UI交互都是通过Widget完成。例如: Widget树结构配置UI结构 ...

Flutter面试:渲染原理

二)绘制 布局完成后,渲染对象树中的每个节点都有了明确的尺寸和位置。Flutter会把所有的渲染对象绘制到不同的图层上。与布局过程一样,绘制过程也是深度优先遍历,而且总是先绘制自身,再绘制子节点。以下图为例:节点1在绘制完自身后,会再绘制节点2,然后绘制它的子节点3、4和5,最后绘制节点6。可...

Flutter Canvas学习之绘图篇

绘制圆角矩形:drawRRect drawRRect方法用于绘制带圆角的矩形,其绘制位置原理与Rect类似,但多了一个设置圆角的参数。绘制圆:drawOval drawOval方法用于绘制圆形,它是在Rect中进行的绘制。绘制圆弧:drawArc drawArc方法用于绘制圆弧,其中useCenter参数表示是否绘制中心点到圆弧两边。绘制路径:drawPath draw...

Flutter UI系统

为了在绘制控件等固定样式的图形时提供更直观、更方便的接口,Flutter 还基于这些基础能力,根据 Material 和 Cupertino 两种视觉设计风格封装了一套 UI 组件库。通过 Flutter API,开发者可以直接使用这些组件库,实现多端高度一致的渲染体验且性能接近原生。在了解 Flutter UI系统和操作系统交互的原理之后,...

等高线绘制的基本原理 基本框架和基本结构 原理图的绘制 原理图绘制步骤 视觉绘制的原理 dxp绘制原理图步骤 ad原理图库绘制方法 ad原理图绘制完整步骤 原理图库的绘制流程
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
沙苑子胶囊注意事项 沙苑子胶囊怎么样 一心堂有沙苑子吗 iCloud在哪里登陆 猫上LOS亮红灯怎么弄连不上网 IMU传感器,你所需要知道的全部 风量传感器矿用智能风量传感器工作原理 有没有人可以介绍一下得图的F4 Plus全景相机? 求推荐一款好用的全景相机 得图公司的F4 Plus全景相机怎么样? word文档有个小锁怎么办? ...怎么速刷介绍_明日方舟扭转醇怎么速刷是什么 《明日方舟》扭转醇速刷方法攻略介绍_《明日方舟》扭转醇速刷方法攻略... 建筑工程前途问题。帮忙指点一下,高手有经验者请进。。 乐视手机620如何在应用设置中关闭屏幕叠加层 ...里料上面有波司登的标志,请仔细看一下!!和专柜质量一样 ...密码都记得,就是没有好友辅助,请问能申诉成功吗 这个自动验证辅助微信号怎么用 三相四线电表可以直接接吗? 消息已发出但被对方拒收了对方微信会显示吗? 如果收到贷款公司的催收电话怎么办? ...催收的给我打电话,他们会不会让我还款,紧急联人填的我的电话?_百度... 未设置成微信紧急联系人被催款该怎么处理? 海尔HBQ柜机的环境温度使用范围是多少到多少?电压范围呢? ...站在阳台上仰望天空,靠右看,有很多白色的圆圆的云状物在转着圈的动... 1平方千米=()平方米 做梦梦见自己哭得伤心欲绝是什么预兆 新车跑了一千八百公里了,还能加燃油增加剂吗 关于监控摄像头的文案 为什么抖音看不到别人的赞? Flutter难点问题之GPU后台Crash 2024 Impeller:快速了解 Flutter 的渲染引擎的优势 气虚应该怎么调理 气虚的调理方法 有哪些小说是关于男主是狐狸的, 你好!我的笔记本电脑是惠普1000-1309tx,原装正版win8,后来在应用商店里... 我的win8想升级8.1.但是每次在应用商店下载一半就无法安装了,为什么... 奶瓶选择什么材质的好呢? tritan奶瓶材质有什么优势和劣势? 用手机QQ账号能在电脑上登录吗? windows10系统怎么用安卓软件 世界最大的动物重几吨?拜托各位了3Q Windows 10上的安卓应用现在对所有用户开放了吗? 怎么在windows10上运行安卓 windows10 怎么用安卓软件 别克君越玻璃升降Lin线故障是什么原因? 微博后台一直自动刷新怎样关掉? 别克君越与lin总线上设备失去通信是什么原因? 小米8打电话为什么没有声音? 为什么我的小米八微信视频没有声音 调解委员会章和司法所工章那个法律效率大