Flutter的一些概念(二)
注:本文同步发布于微信公众号:stringwu的互联网杂谈 Flutter的一些概念(二)
1 flutter的核心渲染模块
当应用启动时flutter 会遍历所有的Widget 形成Widget 树,并通过createElement 方法创建每个element 对象,最后通过createRenderObject 方法创建renderobject 对象
1.1 Widget
Widget 树作来描述UI结构,很轻量,
1.2 Element
Element同时持有Widget和RenderObject
会存放一些上下文信息,,支撑UI 结构
1.3 RenderObject
Render 控制实际的布局和绘制,保存元素的大小和布局等信息,实例化一个RenderObject 是非常耗时的。
2 Layer 和SceneBuilder的区别与联系
在Flutter中,SceneBuilder和Layer都是渲染流程中的关键概念,是紧密相关的,它们一起工作来构建应用程序的UI。当用户操作应用程序时,SceneBuilder会根据用户输入来更新Scene,并生成新的Layer。然后,Flutter将这些Layer传递给GPU或CPU进行渲染,从而生成最终的UI
Layer 和 SceneBuilder 都是渲染流程中的关键概念,它们是构建和渲染 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应用的渲染树,包括所有的Layer。SceneBuilder 提供了一系列方法来添加、修改和删除Layer,构建最终的渲染输出。SceneBuilder 的使用通常涉及以下步骤:
- 创建
SceneBuilder实例:开始构建过程。 - 添加
Layer:使用addRect、addPicture、addTexture等方法添加不同类型的 Layer。 - 构建
Scene:通过调用 build 方法完成 Scene 的构建。 - 提交渲染:将构建好的 Scene 提交给渲染引擎进行渲染。
首先由 UI 线程构建 Widget 树,然后通过 Renderer 将 Widget 树转换成 RenderObject 树,接着 RenderObject 树被转换成 Layer 树。最后,使用 SceneBuilder 构建 Scene,并提交给渲染引擎进行渲染。
3 几个关键字之间的联系
mixin implements extends这三个关键字在Dart中可同时存在,其中
mixin 混入,多个类层次结构中复用类代码的方法,使用mixin的条件
- mixins类只能继承自object
- mixins 不能有构造函数
- implements 实现接口
- extends 继承
4 widget的分类
- 绘制类:
RenderObjectWidget,相关的方法调用顺序为:layout -> performResize -> performLayout -> markNeedsPaint - 代理类,
inheritedWidget和ParentDataWidget,一般用 于状态的共享 - 组合类:
StatelesWidget和StatefulWidget
5 参考
公众号二维码,有兴趣的小伙伴可以关注一下

Flutter的一些概念(二)的更多相关文章
- JavaScript基本概念(二)
JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...
- C#学习基础概念二十五问
C#学习基础概念二十五问 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal ...
- Flutter学习笔记(二)
*.assets 当引用图片的时候,需要在pubspec.yaml的文件中的flutter下添加assets,类似于下面的样子: image.png 这里需要注意的是文件里的assets只要一个缩进即 ...
- 一、动态网络编程的概念 二、Tomcat服务器搭建 三、Servlet组件介绍
一.动态网络编程的概念 动态网页:结合了HTML以外的高级程序编程语言和数据库技术生成的页面. 动态网页编程技术: ASP,PHP,JSP HTTP协议:规范浏览器和服务器之间通信的数据格式. 浏览器 ...
- C#基础概念二十五问
1.静态成员和非静态成员的区别? 答: 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问 不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过 ...
- Flutter扫码识别二维码内容
前面一篇写了生成二维码图片,这篇来写使用相机扫描识别二维码 识别二维码需要用到插件 barcode_scan 首先在 pubspec.yaml 文件中添加以下依赖,添加依赖后在 pubspec.yam ...
- disruptor 核心概念 二
一.Disruptor图解 二.disruptor核心概念 1.RingBuffer到底是啥?正如名字所说的一样,他是一个环(首尾相接的环)它用做在不同上下文(线程)间传递数据的buffer Ring ...
- Flutter入门教程(二)开发环境搭建
学习Flutter,首先需要搭建好Flutter的开发环境,下面我将一步步带领大家搭建开发环境并且成功运行flutter项目. Flutter环境配置主要有这几点: 系统配置要求 Java环境 Flu ...
- 理解 Flutter 的基础概念:Widget
Widget 的本意是组件的意思,熟悉 Web 应用开发的人在后期必定会接触到 Vue.React 等框架,这些框架都有一个核心的概念 -- 组件.组件的目的也很简单,那就是重复率用一段代码,并且能够 ...
- IoC容器Autofac之IOC/DI基本概念(二)
原文:http://www.cnblogs.com/xdp-gacl/p/4249939.html 1.1.IoC是什么 Ioc—Inversion of Control,即“控制反转”,一种设计思想 ...
随机推荐
- python bytecode解析
python bytecode解析 前言 我们的电脑是怎么运行的呢?计算机内部的 CPU 处理器是个硅片,上面雕刻着精心布置的电路,输入特定的电流,就能得到另一种模式的电流,而且模式可以预测,给这些模 ...
- debian大便系统配置国内软件源
本例在debian:buster-slim docker镜像中实验通过 1.启动docker实例 docker run -it --name debian debian:buster-slim bas ...
- Nuxt.js 应用中的 listen 事件钩子详解
title: Nuxt.js 应用中的 listen 事件钩子详解 date: 2024/11/9 updated: 2024/11/9 author: cmdragon excerpt: 它为开发者 ...
- 1000%增长!我仅用一个小时搞定!AI智能体+AI小程序=MVP王炸组合!
前言 在万圣节的前一晚上10月30日,一位运营朋友跟我说了个点子万圣节头像生成器,然后大概给我分析了下整体思路,于是我用扣子Coze平台(coze.cn)搭建了一个AI智能体整个过程花了一个小时就搞定 ...
- 超级干货:Air780E之RS485通信篇,你学会了吗?
今天,我们来学习低功耗4G模组Air780E的RS485通信,同学们,你学习了吗? 一.RS485简介 物联网(IoT)在工业场景中的应用越来越广泛,而RS485是一种常见的通信协议,广泛应用于 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Share Kit
1.问题描述: 使用系统分享组件分享本地文件,点击分享菜单下方的"另存为" 将要分享的文件分享至系统文件管理中,在文件管理中查看分享进来的文件为0B.尝试了3种uri的写法都不行, ...
- Code::Blocks C语言新手教学
## 简介 C语言是一种广泛应用于系统编程和底层开发的编程语言.它是一种结构化的.面向过程的语言,具有高效的性能和灵活的编程风格.在学习C语言时,通常会使用一些集成开发环境(IDE)来编写.编译和运行 ...
- IPC-7711/7721D-中文版 CN 2024 电子组件的返工、修改和维修标准
IPC-7711D-7721D-中文版 CN 2024 电子组件的返工.修改和维修标准 链接:https://pan.baidu.com/s/1r5dm9vsj4-Oj2Jw0HgeTHw?pwd=1 ...
- 【一步步开发AI运动小程序】十六、AI运动识别中,如何判断人体站位?
[云智AI运动识别小程序插件],可以为您的小程序,赋于人体检测识别.运动检测识别.姿态识别检测AI能力.本地原生识别引擎,无需依赖任何后台或第三方服务,有着识别速度快.体验佳.扩展性强.集成快.成本低 ...
- ThreeJs-03材质进阶
一.uv贴图 在3D计算机图形学中,UV映射是一种将2D纹理映射到3D模型表面的方法.在这里,"U"和"V"代表了2D纹理空间的坐标,这与2D笛卡尔坐标系统中的 ...