首页 > 其他分享 >Flutter的一些概念(二)

Flutter的一些概念(二)

时间:2024-08-31 16:15:25浏览次数:11  
标签:Layer 渲染 SceneBuilder Widget Scene 概念 一些 Flutter

注:本文同步发布于微信公众号:stringwu的互联网杂谈 Flutter的一些概念(二)

1 flutter的核心渲染模块

当应用启动时flutter 会遍历所有的Widget 形成Widget 树,并通过createElement 方法创建每个element 对象,最后通过createRenderObject 方法创建renderobject 对象

1.1 Widget

Widget 树作来描述UI结构,很轻量,

1.2 Element

Element同时持有WidgetRenderObject
会存放一些上下文信息,,支撑UI 结构

1.3 RenderObject

Render 控制实际的布局和绘制,保存元素的大小和布局等信息,实例化一个RenderObject 是非常耗时的。

2 Layer 和SceneBuilder的区别与联系

Flutter中,SceneBuilderLayer都是渲染流程中的关键概念,是紧密相关的,它们一起工作来构建应用程序的UI。当用户操作应用程序时,SceneBuilder会根据用户输入来更新Scene,并生成新的Layer。然后,Flutter将这些Layer传递给GPU或CPU进行渲染,从而生成最终的UI
LayerSceneBuilder 都是渲染流程中的关键概念,它们是构建和渲染 UI 的一部分;

2.1 Layer

Layer 树是渲染树的一部分,但它与 Widget 树不同,因为 Layer 树是专门用于渲染的。 Layer 是一个抽象类,代表了屏幕上的一块区域。在 Flutter 的渲染流程中,Widget 首先被转换成 Element,然后 Element 被转换成 RenderObject,最终 RenderObject 被转换成 Layer
Flutter 中有几种不同类型的 Layer,包括但不限于:

  • ContainerLayer:一个简单的层,没有任何视觉内容,但可以包含其他层。
  • PictureLayer:包含 Skia 图形引擎的 Picture 对象,用于绘制图形。
  • OpacityLayer:可以设置子层的透明度。
  • TransformLayer:可以对子层进行变换操作,如旋转、缩放、平移等。
  • ClipRectLayer、ClipRRectLayer 和 ClipPathLayer:用于裁剪子层,只显示特定形状内的区域。

2.2 SceneBuilder

SceneBuilder 是一个在构建阶段用来构建 Scene 对象的工具类。Scene 对象代表了整个 Flutter应用的渲染树,包括所有的LayerSceneBuilder 提供了一系列方法来添加、修改和删除Layer,构建最终的渲染输出。SceneBuilder 的使用通常涉及以下步骤:

  • 创建SceneBuilder 实例:开始构建过程。
  • 添加 Layer:使用 addRectaddPictureaddTexture 等方法添加不同类型的 Layer。
  • 构建Scene:通过调用 build 方法完成 Scene 的构建。
  • 提交渲染:将构建好的 Scene 提交给渲染引擎进行渲染。

首先由 UI 线程构建 Widget 树,然后通过 RendererWidget 树转换成 RenderObject 树,接着 RenderObject 树被转换成 Layer 树。最后,使用 SceneBuilder 构建 Scene,并提交给渲染引擎进行渲染。

3 几个关键字之间的联系

mixin implements extends这三个关键字在Dart中可同时存在,其中
mixin 混入,多个类层次结构中复用类代码的方法,使用mixin的条件

  • mixins类只能继承自object
  • mixins 不能有构造函数
  • implements 实现接口
  • extends 继承

4 widget的分类

  • 绘制类:RenderObjectWidget ,相关的方法调用顺序为:layout -> performResize -> performLayout -> markNeedsPaint
  • 代理类,inheritedWidgetParentDataWidget,一般用 于状态的共享
  • 组合类:StatelesWidgetStatefulWidget

5 参考

Flutter面试题

公众号二维码,有兴趣的小伙伴可以关注一下

标签:Layer,渲染,SceneBuilder,Widget,Scene,概念,一些,Flutter
From: https://www.cnblogs.com/WoodJim/p/18390424

相关文章

  • 一些JAVA面试题
    前言由于这段时间经常性的找工作找工作找工作,然后面试题问的也比较多,我就想着对这个进行一些整合,基本都是我面试的时候问过的一些问题,三年经验的JAVA开发,可能答案有些不太准确,请多多包涵和见谅;线上面试题基础类型判断publicstaticvoidmain(String[]args){//......
  • Nginx 中的反向代理和负载均衡不是完全相同的概念,但它们经常一起使用,并且在某些场景下
    反向代理(ReverseProxy)反向代理指的是代理服务器接收来自客户端的请求,并将这些请求转发给实际提供服务的服务器。客户端并不直接与实际的服务器通信,而是通过反向代理服务器来完成请求和响应的传递。反向代理的主要用途包括:缓存静态内容以减少后端服务器的负载。提供额外的安全层,隐......
  • 一些软件使用遇到的问题或感想
    一前言:记录一些软件使用遇到的问题或感想二正文1某电商小程序,遇到问题找客服沟通,当时人在地铁上,向客服发送我的请求后,很久没有回应,后来显示网络问题相关的提示,再过一会,仍在地铁,可能网络好了一些,要我对此次客服服务进行评价,当时很奇怪,都未看见客服对我要求的回应,怎么就完成......
  • 【机器学习】K近邻(K-Nearest Neighbors,简称KNN)的基本概念以及消极方法和积极方法的区
    引言K近邻(K-NearestNeighbors,简称KNN)算法是一种基础的机器学习方法,属于监督学习范畴文章目录引言一、K近邻(K-NearestNeighbors,简称KNN)1.1原理详述1.1.1距离度量1.1.2选择k值1.1.3投票机制1.2实现步骤1.3参数选择1.4应用场景1.5优缺点1.5.1优点1.5.2缺点......
  • 关于pdf转markdown的一些总结
    实现一个陌生的功能,一般会经过这几个阶段如,调研,技术选型,确定最佳技术方案与备选方案,开发,测试,上线;调研大致了解不同的产品最好能上外网,首选用谷歌搜,其次用百度搜;关键词可以是pdf转markdown,或pdfmarkdownapi等等;例如我在百度搜索pdf转markdown,最后得到了方案有Nought:htt......
  • 关于java输入字符串的一些问题
    最近自学java,学到了Scanner类这块,我想着测试一下输入,遇到了个问题,我想要输入两个字符串,但是我输入一个字符串后程序就停止运行了,有点疑惑,我的代码如下s1=scan.next();System.out.print(s1);s2=scan.nextLine();System.out.print(s2);结果就是只能输出s1,然后我就想起来这......
  • Ae常用工具和图层的概念
    目录常用工具 图层的概念图层类型常用工具 对工具栏长按鼠标左键可以看到一个下拉菜单。 选中矩形后可以进行填充或者描边。 摁住shift建立一个矩形。摁住空格可以移动画布。 选取工具可以移动图形。旁边还有放缩工具。 图层的概念比如我们建立一个新......
  • 数据通信的一些基础概念
    数据通信数据通信,即设备之间传递数据信息的过程。数据通信方式根据数据通信方式不同可分为:1、串行通信,即数据逐位按照顺序以此传输。2、并行通信,即数据各位可以通过多条线同时传输。数据传输方向根据数据传输方向不同,可分为:1、全双工,指数据可以同时进行双向传输,日常的......
  • 关于关于STM32F103芯片RTC模块的一些注意事项
    1、首先是晶振的问题,只有外部低速晶振LSE支持VBAT供电时持续运行,LSI或者HSE均不行,所以若要求设备断电后,RTC时钟可以继续运行,一定要使用LSE晶振。2、关于LSE晶振的干扰问题,本次调试设备的过程中发现,LSE虽然正常起振,RTC也正常走时,但刚开机的时候会走的比较慢,之后逐渐稳定,通过抓取LS......
  • JSON的概念及应用场景举例
    JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它采用易于人阅读和机器解析的纯文本形式来表示结构化的数据。JSON基于ECMAScript(即JavaScript)的一个子集,但其语法和数据结构独立于任何特定的编程语言,因此被广泛应用于各种编程环境和平台之间进行数据交换。JSON......