Flutter的一些概念(二)

news/2024/10/4 11:16:50

注:本文同步发布于微信公众号: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面试题

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/55041.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

阿尔茨海默病症识别+图像识别Python+人工智能+深度学习+TensorFlow+机器学习+卷积神经网络算法

一、介绍 阿尔茨海默病症识别。使用Python作为主要编程语言进行开发,基于深度学习等技术使用TensorFlow搭建ResNet50卷积神经网络算法,通过对病症图片4种数据集进行训练[轻度痴呆, 中度痴呆, 非痴呆, 非常轻微的痴呆],最终得到一个识别精确度较高的模型。然后使用Django框架…

【安全运营】安全事件运营SOP:网络攻击

一、常见网络攻击1.1 网络攻击概述 1.2 网络攻击方式 1.3 网络攻击检测 二、安全运营SOP2.1 攻击告警初判 2.2 攻击地址封禁 2.3 攻击告警研判 2.4 应急响应处置 2.5 附SOP流程图 三、网络攻击防范3.1 减少对外暴露面 3.2 系统上线…

【可视化】一套全面的数据可视化指南

#一、可视化问题#二、可视化原则#三、类型原创 DataCharm今天跟大家分享一套谷歌数据可视化团队形成的全面的数据可视化指南,涵盖了设计原则、图表分类、图表的选用、样式设计、交互设计、仪表板设计等方面。 一、可视化问题 不论你是从事数据相关工作,还是业务相关工作,或多…

【应急靶场系列】vulntarget-n-勒索病毒应急靶场

原创 vulntarget 乌鸦安全✎ 阅读须知 乌鸦安全的技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或…

CentOS 7 安装 .net 8 环境

1)下载 .net 8 运行时 https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0 依据运行程序类型,下载运行时,比如需要运行web应用,下载如同运行时,一般选择 x64 版本 2)上传到服务器 解压tar -xzf dotnet-runtime-8.0.x-linux-x64.tar.gz -C /opt/dotnet/ 3)配置环…

《NET CLR via C#》---第八章(类的实例构造器,结构的实例构造器,类型构造器,操作符重载方法,转换操作符,扩展方法)

类的实例构造器 构造器是将类型的实例初始化为良好状态的特殊方法。构造器方法在“方法定义元数据表”中始终叫做.ctor(constructor的简称)。创建引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例…

一些学习资料网站

1、面试笔记资料 https://cyc2018.xyz2、网道 https://wangdoc.com/

K大数查询

标记永久化:1:26:00 如果外层线段树为下标线段树会发现没有办法快速维护,这个时候我们就要想到权值线段树:外层采用权值线段树,其每个节点维护一颗下标线段树,表示这个节点所代表的权值在序列中有多少个。如果\(n=5\),值域大小为\(5\),那么权值线段树如下比如\([4,5]\)这…