Flutter Widgets体系结构

Flutter 跨平台框架中的 Widgets,你了解多少? 但是,除了 child 这个 Widget 之外,其他的 constraints,padding,color,alignment,transform 等都是构成 Widget 的元素!当 State 发生变化的时候,需要调用 setState() 方法来通知 flutter 框架来调用 State 的 build 方法,从而将变化反馈到用户界面中。最后,因为 UI 的实现和底层的操作系统是分离的,所以 F。,导致代码中的层级结构特别的多,可能会看的。就是,你可以使用不同的,非常基础的。 阅读详情
  • Flutter的布局基于Widget,但渲染基于RenderObject,所以有些布局看着很深但是实际性能较高
  • Flutter的布局从代码上看就是基于各个widget class的构造器,构造器的输入是(布局数据, 子Widget, 回调),其中布局数据用于确定自身的UI属性。
  • Flutter的Widget分三类,不带孩子的,带一个孩子的和带多个孩子的。
  • dart中有比较多的语法特性刚好适用于Flutter这样的布局模式
  • StatelessWidget表示这个Widgets只有一个状态
  • StatefulWidget表示这个Widgets有一个或多个状态

引用关键字

引用当前对象的属性或方法的关键字widget和this的区别

在Flutter的Dart语言中,`this`关键字被用来引用当前对象的实例成员(属性或方法)。其在大多数面向对象的编程语言中的使用方式相似。当你在类的方法中访问同一个类的另一个方法或变量时,可以使用`this`关键字,尤其是当参数名称与成员变量名相同,从而需要区分作用域时,也可以直接省略。在Flutter widget树构建方法(例如`build`方法)中,你可能需要访问当前widget的属性或调用它的方法。

状态

  • 数据流动导致状态改变
  • 状态是数据的表征
  • 状态数一般能代表一个事物的复杂程度

三棵树

UI布局绘制的有三棵树分别是【Widget Tree, Element Tree, RenderObject Tree】, 可以对应理解为一个建筑工程中的【设计师,项目经理,建筑工人】。

Widget Tree

用于整体的布局的动态配置(statefulWidget)当然也可以是静态配置(statelessWidget)。是应用开发者根据业务需求写出来的

Element Tree

负责Widget的生命周期,管理父子关系。是Flutter本身自己实现的,其内部提供了动态操作树的能力,比如mount就是添加(挂载)树的根节点,deactivateChild就是移除孩子节点。另外每个Elmenet Tree中的节点都持有对应的Widget,这个Widget的引用用于管理Widget的生命周期比如initState,build等。

RenderObject Tree

负责确定大小并渲染。其和Widget Tree不是一对一的关系,因为有些Widget就是单纯的配置Widget,比如Expand

Flutter中测量,布局与渲染

  • 布局方向:笛卡尔坐标系,方向也是手机(left, top)为原点
  • 主轴: 主布局方向,比如Col主布局方向是竖向所以他的主轴就是竖向
  • 交叉轴:垂直于主轴的另一个轴
  • 紧约束(Tight):强制子布局的宽高
  • 松约束(loose):子布局的大小要在我的控制的范围内就行了

Flutter中的布局流程

  • 上层widgetA向下层widgetB传递约束条件
  • 下层 widget B向上层 widget A 传递大小信息
  • 上层 widget A 决定下层 widget B 的位置

所以,widget 通常情况下 不能任意获得其想要的大小。在不考虑整棵树的情况下,几乎不可能精确定义任何 widget 的大小和位置。

参考资料

图解Flutter Widgets体系结构 - 知乎 (zhihu.com)

从0开始写一个基于Flutter的开源中国客户端(3)——初识Flutter & 常用的Widgets 都说三年是程序员的一个坎,能否晋升或者提高自己的核心竞争力,这几年就十分关键。技术发展的这么快,从哪些方面开始学习,才能达到高级工程师水平,最后进阶到Android架构师/技术专家?我总结了这 5大块;我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。 阅读详情

相关推荐

Flutter开发之基础Widgets

简介 概念 Flutter里有一个非常重要的核心理念:一切皆为组件,Flutter的所有元素都是由控件构成的。 与原生开发中控件所代表的含义不同,Flutter中widget的概念更加广泛,它不仅可以表示UI元素,也可以表示一些功能性的组件,如用于手势检测的 GestureDetector widget、用于应用主题数据传递的Theme等等。而原生开发中的控件通常只是指UI元素。由于Flutter...

xiangzhihong8的专栏 954

Flutter学习四:Flutter开发基础(一)Widget

Widget 字面意思:控件、组件、部件、微件、插件、小工具widget 的功能是“描述一个UI元素的配置信息”,所谓的配置信息就是 Widget 接收的参数Widget 只是描述一个UI元素的配置信息,并不是表示最终绘制在设备屏幕上的显示元素无状态的组件,用于不需要维护状态的场景继承自widget类,重写了方法通常在build方法中通过嵌套其他 widget 来构建UI,在构建过程中会递归的构建其嵌套的 widget//main 函数为应用程序的入口。

D_lunar的博客 3515

【Flutter】widgets (1) 组件概述 widget tree 常见的widgets

在 Flutter 中,所有的 UI 元素都被称为 widgets,包括整个应用程序本身。一个 Flutter 应用通常由多个小的 widgets 组合而成,这些 widgets 可以是文本,按钮,图片,甚至是其他的 widgets。

Code Metaverse 1616

Flutter Widget 体系完全讲解:Widget、Element、RenderObject 到自定义控件全梳理

Flutter UI的核心机制是Widget→Element→RenderObject三层架构:Widget作为轻量级UI描述,Element管理生命周期和状态,RenderObject负责实际布局和绘制。文章解析了三者的分工关系,解释了Flutter性能优化的底层原理,并详细说明了四层自定义控件的实现方式。从最常用的组合型Widget到高级的自定义RenderObject,帮助开发者建立完整的Flutter UI开发思维模型。这种分层架构既保证了开发效率,又能满足复杂的定制需求,其设计理念与Android

Mark Wu 的博客 2159

【Flutter】widgets (4) Flutter Stateless Widgets 无状态组件用法详解

Stateless Widgets 是最基本的 Flutter widget。它们描述了在给定配置和环境下用户界面的一部分。Stateless Widgets 是不可变的,这意味着它们的配置信息在其生命周期内不能改变。一旦你创建了一个 Stateless Widget,你不能更改它。任何更改都会导致 Flutter 创建一个新的 Widget。

Code Metaverse 1053

Flutter Widgets实战教程:从基础到进阶

Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面。通过使用Dart语言,开发者能够用一套代码库同时创建iOS和Android的应用程序。按钮是应用中不可或缺的一部分,它们是用户与应用交互的主要方式之一。在Flutter中,通过使用不同的Widgets来创建按钮,并且还可以通过自定义来满足特定的设计要求。本章节将深入探讨Flutter中的按钮Widgets,以及如何实现自定义按钮。在某些情况下,预设的按钮Widgets无法满足开发者的所有需求。

weixin_42356162的博客 1174

wxwidget体系结构

https://blog.youkuaiyun.com/comphoner/article/details/69201083

net_building的专栏 232

半导体AMHS天车振动控制:从0.5G到超低振动的技术演进与工程实战

在先进晶圆厂中,自动化物料搬运系统(AMHS)的天车如同空中出租车,承担着晶圆盒(FOUP)在洁净室各工艺区间的转运任务。然而,当天车加减速、过弯或抓取时产生的机械振动通过轨道梁和建筑结构传递至光刻机等敏感设备,便可能直接威胁套刻精度与良率。传统被动减振方案依靠橡胶垫和弹簧,在0.5G指标时代曾行之有效,但在EUV光刻和先进制程面前已力不从心。主动振动控制技术通过传感器、控制器与作动器构成的闭环系统,在轨道吊点和机械手端实时输出反向力抵消振动,配合磁悬浮走行、轻量化结构及调度系统的路径优化,将振动从0.5G

weixin_29188043的博客 341

深入解析Flutter三棵树:Widget、Element与RenderObject的协作机制

本文深入解析Flutter三棵树(Widget、Element与RenderObject)的协作机制,揭示其高效渲染流程。通过类比工厂生产线,详细介绍了声明式UI构建、渲染管线处理和引擎处理三个阶段,帮助开发者优化性能,实现60fps流畅渲染。文章还提供了实战案例和高级调试技巧,助力提升Flutter应用开发效率。

night的博客 621

无痛安装及初始配置 PHP 8.0.3 + Apache 2.4 + MySQL 8.0

PHP 8.0.3 + Apache 2.4 + MySQL 8.0MySQL 8.0.23 安装下载安装配置环境变量初始化MySQLPHP8.0.3 安装下载安装配置环境变量Apache 2.4 安装下载安装启动 MySQL 8.0.23 安装 下载 到官方网站下载:https://dev.mysql.com/downloads/mysql/ 目前的最新版本是MySQL 8.0.23 在Windows上有两种安装方式,一个是zip压缩文件解压然后配置,另一个是图像化界面安装。 这里选择第一种方法安装:

Kuang Da's Blog 6208

探索niri:让你的Linux桌面布局无拘无束

niri是一款基于Wayland的滚动平铺合成器,采用创新的窗口管理方式。它将窗口排列为向右无限延伸的条目,支持独立显示器布局和动态垂直工作区,确保多任务操作流畅性。核心功能包括概要视图、截图界面、屏幕投射、手势操作、窗口分组等,并支持自定义布局和动画效果。niri具备良好的稳定性,兼容xwayland-satellite工具,灵感来自PaperWM但突破了GNOME限制。该项目为追求高效桌面管理的用户提供了全新解决方案,欢迎加入社区交流体验。

weixin_44626085的博客 1816

Flutter移动应用开发 - 04 Flutter 常用 widget 整理

这里按照 Row, Column, GridView, Container, ListView, Stack, Card, ListTile为主线整理。还包括Expanded、SizedBox、Spacer、Icon、Image、BoxDecoration等widget。中间穿插好几个实用案例。真ikun入!!!

如果没有躺赢的命,那就站起来奔跑,你的努力一定会对得起这一路的颠沛流离。 2162

告别虚拟机!在WSL2的Ubuntu里5分钟跑通LVGL v9.2图形界面(附SDL2配置避坑)

本文详细介绍了如何在WSL2的Ubuntu子系统中快速配置LVGL v9.2图形库的SDL2模拟环境,帮助嵌入式开发者在5分钟内跑通第一个图形界面示例。通过WSL2和VSCode的远程开发插件,实现Windows系统下无缝使用Linux工具链,大幅提升开发效率。

weixin_28736335的博客 425

flutter 专题 九十 三 Flutter开发之基础Widgets

众所周知,Material是Android应用默认的视觉风格,Cupertino则是iOS应用的默认视觉风格,为了实现两种不同的视觉风格,Flutter 在基础组件库之上Flutter又提供了一套Material风格和一套Cupertino风格的组件库,以满足两种不同设计风格的开发需要。:在创建StatefulWidget后,initState是第一个被调用的方法,同createState一样只被调用一次,此时widget的被添加至渲染树,mount的值会变为true,但并没有渲染。

m0_61164038的博客 951

基于simulink 的不间断电源ups的项目实例

UPS系统的核心组件包括整流器、逆变器、电池管理系统和控制系统。- **Three-Phase Controlled Rectifier**:设置触发角为0度,用于控制整流器的输出电压。- **Three-Phase Inverter**:设置逆变器的输出频率为60Hz,用于将直流电转换为交流电。- **Control System**:编写MATLAB函数,用于监测市电状态并控制各模块的工作模式。- **Step**:设置阶跃时间,例如0.05秒,阶跃前后的值分别为0和1,用于模拟市电中断。

xiaoheshang_123的博客 708

Python 爬虫实战:手机应用商店评论数据爬取与分析

移动应用市场蓬勃发展,用户的评论数据包含了大量有价值的信息,如用户满意度、功能反馈、改进建议等。通过分析这些评论,我们可以挖掘应用的优缺点,甚至预测用户趋势。由于 Apple App Store 评论是动态加载的,我们使用。本篇博客将详细介绍如何使用 Python 爬取。爬取大量数据时,可能会遇到反爬机制。库获取 Google Play 评论。评论数据是动态加载的,需要使用。

2201_76125261的博客 2322

Flutter合理拆分widgets

初学Flutter,好多Demo中widgets层层嵌套,最后导致一个页面的代码量非常大,嵌套非常深,不利于维护,于是想到拆分。 何时拆分: 大Widget:当一个Widget非常大,嵌套层数过多,其中嵌套了很多小Widget的时候,把一个小Widget从大Widget中拆分出来,这样利于维护; 重复Widgets:当一个Widget由多个重复的小Widget组成,应当把小Widget拆分出来; 复杂Widget:当一个Widget有很多小Widgets组成,而且组合关系很复杂的时候,应该拆..

阿福的专栏 1648

基于MATLAB实现语音信号MFCC特征提取(附完整代码)

你有没有想过你的智能手机是如何理解语音指令的?或者 Alexa 和 Siri 等语音助手如何处理您的命令?这种卓越能力背后的机制在很大程度上归功于一种称为 Mel 频率倒谱系数 (MFCC) 的方法。语音识别技术允许机器解释人类语音,将口语转换为计算机可以操纵的格式。这项技术对于开发交互式和响应式 AI 至关重要,例如声控助手、自动化客户服务系统和实时翻译服务。MFCC 代表 Mel 频率倒谱系数。这是用于自动语音和说话人识别的功能。

baidu_34971492的博客 1313

Flutter Widgets 之 PageView

注意:无特殊说明,Flutter版本及Dart版本如下: - Flutter版本: 1.12.13+hotfix.5 - Dart版本: 2.7.0 基础用法 PageView控件可以实现一个“图片轮播”的效果,PageView不仅可以水平滑动也可以垂直滑动,简单用法如下: PageView( children: <Widget>[ MyPage1()...

老孟Flutter 2万+

DAMMFND: Domain-Aware Multimodal Multi-view Fake News Detection

虚假新闻的泛滥不仅严重阻碍了互联网社交媒体的健康发展,还在政治、经济和社会层面造成了实际危害,凸显了自动化虚假新闻检测的重要性(Zhou 等,2015;Cui 等,2019;Zhu 等,2022a;Li 等,2024c,b,a)。现有的虚假新闻检测方法通常聚焦于特定领域的新闻,例如健康或政治领域。然而,在现实世界中,社交媒体上的新闻往往跨越多个领域,这就要求现有的虚假新闻检测方法必须考虑多域泛化(Nan 等,2021;Qi 等,2019;Zhu 等,2022b)。

qq_52053775的博客 337

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Flutter Neumorphic Widgets 使用教程

Flutter Neumorphic Widgets 使用教程 1. 项目介绍 Flutter Neumorphic 是一个开源项目,旨在为 Flutter 开发者提供一系列的 Neumorphic(新拟态)风格的 UI 组件。Neumorphic 设计风格以其柔和的阴影和光影效果著称,使得界面元素看起来既有立体感又不会过于突兀。该项目由 happyharis 创建,并在 GitHub 上开源,项...

gitblog_00241的博客 1221

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Flutter Widgets目录(flutter中文网整理)

** Flutter Widgets目录 说明:对一些自己用到过的widgets进行了说明 ** 目录: 1. 基础组件 2. Material Component 3. Cupertino(ios风格的Widget) 4. layout 5. Text 6. Assets、图片、Icons 7. Input 8. 动画、Motion 9. 交互模型 10. 样式 11. 绘制和效果 12. As...

qq_41377367的博客 792

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Flutter 中 Positioned、Align、Center 的使用详解 _ Flutter Widgets

), Positioned( 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》 【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享 top: 10, child: getItem(‘top 10’), ), Positioned( bottom: 10, child: getItem(‘bottom 10’), ), Positioned( height: 80, child: getItem(‘height 80’), ), ]

m0_64604311的博客 2845

探索Syncfusion Flutter Widgets:打造高效美观的Flutter应用

探索Syncfusion Flutter Widgets:打造高效美观的Flutter应用 在移动应用开发领域,Flutter以其高效、跨平台的能力赢得了广大开发者的心。而今天,我们要介绍的是一个能够极大提升Flutter应用开发体验和效果的项目——Syncfusion Flutter Widgets。 项目简介 Syncfusion Flutter Widgets是一个由Syncfusion公司...

gitblog_00028的博客 994

Flutter 中文文档:定位到目标 widgets

在测试环境下,为了定位 widgets,我们需要用到Finder类。我们可以编写自己的finderclasses,不过通常使用flutter_test包提供的工...

Flutter 社区 1711

Flutter 初探(二):基础类Widgets和布局类Widgets上手

学习内容 以下是关于基础Widgets和布局类Widgets的部分汇总 基础类包括: 按钮 图片及ICON组件 单选开关和复选框 输入框及表单 表单验证 布局类Widget包括: 纵向布局Row 弹性布局Flex 流式布局Wrap 层叠布局Stack routes: { "new_page": (context) => NewRoute(), // 使...

若数的博客 1427
上一篇: flutter环境搭建实践
下一篇: flutter布局更新
jsPao
博客等级 码龄7年 549粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值