【布局 widget】OverflowBox 与 SizedOverflowBox

news2025/8/22 11:04:52

OverflowBox

对于 OverflowBox ,文档只有一句话:把不同的约束强加给 child,允许 child overflow 父容器。这句话说的太简略了,使用的时候还是一头雾水,代码逻辑是这样的:

 BoxConstraints _getInnerConstraints(BoxConstraints constraints) {return BoxConstraints(minWidth: _minWidth ?? constraints.minWidth,maxWidth: _maxWidth ?? constraints.maxWidth,minHeight: _minHeight ?? constraints.minHeight,maxHeight: _maxHeight ?? constraints.maxHeight,);}@overridevoid performLayout() {if (child != null) {child?.layout(_getInnerConstraints(constraints), parentUsesSize: true);alignChild();}} 

用语言描述就是,优先取 OverflowBox 的 minWidth,maxWidth,minHeight,maxHeight,父级的约束值是用来兜底的,这样就清晰多了。parentUsesSize: true 是因为 OverflowBox 有 align 属性,需要摆放 child,比如想把 child 右对齐,如果不知道 child 的 size ,就无法知道 child 左边的 offset 是多少,所以 child 尺寸变化的时候,需要通知 OverflowBox ,让 OverflowBox 重新计算 offset ,调整位置。

OverflowBox 本身的大小是多少呢?下面两段代码给出解答。

 @overridebool get sizedByParent => true;@overrideSize computeDryLayout(BoxConstraints constraints) {return constraints.biggest;} 

sizedByParent 设置为 true 的意思是 OverflowBox 的尺寸只与 constrains 有关,也就是说父级完全可以决定 OverflowBox 的大小。具体是多大呢? constraints.biggest 的意思就是尽可能的大。

OverflowBox 给人的感觉是可以让 child 溢出,但它也可以缩小 child 的活动范围。所以 OverflowBox 的作用就是更改父级的约束。

溢出部分无法响应点击事件

SizedOverflowBox

一个有明确固定尺寸的组件,透传原始约束给子组件,子组件如果比父组件大,就会 overflow。

 @overridevoid performLayout() {size = constraints.constrain(_requestedSize);if (child != null) {child!.layout(constraints, parentUsesSize: true);alignChild();}} 

constraints.constrain(_requestedSize) 这句的意思就是在 constrains 的允许范围内,取最贴近 _requestedSize 的值。

通过代码可以看出,SizedOverflowBox 的尺寸是受约束和 size 参数共同影响的,也就是说,尺寸必须在约束允许的范围之内。比如约束 50 <width< 100 , size(10,110),那么最终 size(50,100)。

如果 SizedOverflowBox 的约束是 tight 约束,那么 SizedOverflowBox 就完全失去作用。因为 SizedOverflowBox 和 它的 child 都没有了发挥的空间,都只能一样大。

同样,溢出部分无法响应点击事件

应用场景

虽然这两个组件名字很像,但是效果上大相径庭。

比如实现下面的效果,用 OverflowBox 很合适。

Row(mainAxisAlignment: MainAxisAlignment.spaceAround, children: [Container(width: 100,height: 100,color: Colors.green,),Container(width: 100,height: 100,color: Colors.green,child: OverflowBox(maxWidth: 110,maxHeight: 110,child: Container(width: 110,height: 110,decoration: BoxDecoration(border: Border.all(color: Colors.red)),)),),Container(width: 100,height: 100,color: Colors.green,) ]) ```

OverflowBox 的 child 红色 box 溢出 ,但不会影响 Container 的布局,相当于 css 中 outline 的效果。

SizedOverflowBox 有什么应用场景呢?在下图中蓝色的 box 溢出绿色的 box,这种适合用 SizedOverflowBox。

Container(color: Colors.green,alignment: Alignment.topRight,width: 100,height: 100,child: SizedOverflowBox(size: const Size(0, 0),child: Container(width: 20,height: 20,color: Colors.blueAccent,)),
) 

这种效果一般用来做装饰。

OverflowBox 与 SizedOverflowBox 可以实现的效果用其它 widget 也可以实现,不过这两种情况下,用 OverflowBox 与 SizedOverflowBox 可读生更好些。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

文科专业女生转行程序员月入20k:女生不适合做程序员吗?

背景故事 我毕业于某不知名985的经济学院&#xff0c; 19年毕业就跨考了计算机&#xff0c; 第一年考的是北大。北大专业课自主命题&#xff0c;考试范围包括慕课上的四门课408四门内容&#xff0c; 我就去做了炮灰。 第二年因为疫情和一些别的事情&#xff0c; 9月份开始准备考…

用 Python 制作各种用途的二维码

当你提到二维码时&#xff0c;大多数人想到的是仓库管理或产品标签等 "工业 "应用&#xff0c;但这篇文章在很大程度上是关于二维码的个人和社会用途。 有趣的事实 二维&#xff08;QR&#xff09;码是在1994年发明的&#xff0c;最近几年由于新冠肺炎的出现&#…

一道非常棘手的 Java 面试题:i++ 是线程安全的吗?

i 是线程安全的吗&#xff1f; 相信很多中高级的 Java 面试者都遇到过这个问题&#xff0c;很多对这个不是很清楚的肯定是一脸蒙逼。内心肯定还在质疑&#xff0c;i 居然还有线程安全问题&#xff1f;只能说自己了解得不够多&#xff0c;自己的水平有限。 先来看下面的示例来…

cache 缓存

缓存原理 测试样例 验证码 获取验证码 验证 验证码是否正确 idea 启动缓存 手机验证码 idea 手机 获得验证码 ehchace 数据淘汰策略 使用redis 然后启动 redis 服务器 redis-server.exe redis.windows.conf 启动redis 客户端redis-cli.exe time-to-live 最大活动时间 缓…

jsp+ssm计算机毕业设计职业中介信息管理系统【附源码】

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JSPSSM mybatis Maven等等组成&#xff0c;B/S模式 Mave…

【蓝牙依赖】微信小程序 + uni通用,自用蓝牙依赖文件总结

引言 今年相较去年相比&#xff0c;做的比较多的是&#xff0c;蓝牙方面的对接工作。 因此&#xff0c;我整理了大半年来&#xff0c;对接蓝牙的经验&#xff0c;编写了蓝牙依赖文件。 这样可以有效的提升我的开发效率&#xff0c;以及合理增加我快乐的摸鱼时间 ~ 正文 废话…

ubuntu 安装supervisord

ubuntu 系统安装命令如下 sudo apt update && sudo apt install supervisor Supervisor服务在安装后自动运行&#xff08;这点从安装后创建的symlink到systemd的自启动服务可以看出&#xff09;。检查其状态&#xff1a; sudo systemctl status supervisor 如下安装…

基于SPRINGBOOT的高校羽毛球馆信息管理系统的设计与实现

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a;基于springboot的高校羽毛球馆信息管理系统的设计与实现 模块划分&#xff1a;通知类型、通知信息、用户信息、用户充值、…

成功转行Python工程师,年薪30W+,经验总结都在这!

这是给转行做Python的小白的参考&#xff0c;无论是从零开始&#xff0c;或者是转行的朋友来说&#xff0c;这都是值得一看的&#xff0c;也是可以作为一种借鉴。 而且我决定转行IT&#xff08;互联网&#xff09;行业&#xff08;已转好几年&#xff09;&#xff0c;其实理由…

基于Java+Swing+mysql游泳馆会员管理系统

基于JavaSwingmysql游泳馆会员管理系统一、系统介绍二、功能展示1.管理员登陆2.主页面3.添加会员卡4.存款管理5.消费管理6.会员资料查询7.会员资料修改7.会员卡禁用、挂失三、系统实现1.StudentFrame .java四、其它1.其他系统实现一、系统介绍 该系统实现了管理员系统登陆、售…

四大领先优势加持,华为云会议服务更省心可靠!

&emsp;&emsp;随着数字化转型的加速&#xff0c;随时随地视频沟通和数据协作的工作方式加速走进各行各业&#xff0c;并衍生出丰富的行业应用场景。云会议融入到了行业的增值和业务创新中&#xff0c;如在线办公&#xff0c;在线教育&#xff0c;远程会诊&#xff0c;金…

T-SQL程序练习01

目录 一、编写T-SQL程序&#xff0c;计算 1 2 − 3 4 − 5 … − 99 100 ? 二、写一个求三个数最大值的函数&#xff0c;输入为三个整数&#xff0c;输出为其中的最大值。 三、写一个T-SQL函数 &#x1d453;&#x1d44e;&#x1d461;&#xff0c;利用标准体重计算公式…

华为云桌面,数字化时代便捷、安全的办公选择

在当今效率优先、信息技术高度发展的时代&#xff0c;云桌面作为一种帮助企业实现快速办公上云的云服务&#xff0c;将应用于企业日常办公中&#xff0c;它不仅能够提升工作效率&#xff0c;而且还具有良好的扩展性和可扩展性&#xff0c;因此备受业界关注。 其中&#xff0c;华…

太难了!自学编程转行经历分享

本人坐标武汉&#xff0c;双非机电专业背景出身&#xff0c;求职目标互联网行业。 其实机电专业在整个机械大类里算是好就业一点的了&#xff0c;毕竟会涉及到单片机和PLC&#xff0c;随着物联网以及智能制造的发展&#xff0c;前景比传统的机械专业还是要好很多。&#xff08…

PGP邮件加密软件的使用

一、实验目的及要求 1.熟悉公开密钥密码体制&#xff0c;了解证书的基本原理&#xff0c;熟悉数字签名&#xff1b; 2.熟练使用PGP的基本操作&#xff0c;能对邮件或传输文档进行加密&#xff1b; 二、实验内容 1.创建一私钥和公钥对 使用PGPtray之前&#xff0c;需要用PGPkey…

【架构师(第五十二篇)】 几个前端工具的基本使用

前端截图 html2canvas 基本用法 import html2canvas from html2canvas const screenshot () > {// 获取需要截图的 dom 节点const el document.getElementById(target-id)// 第一个参数是节点,第二个参数是一些配置// 默认是不对跨域资源做处理, 需要添加额外的配置 use…

绿色高效办公,华为云桌面不可或缺

在互联网高速发展的今天&#xff0c;互联网应用已经成为人们日常生活中不可或缺的一部分。随着网络技术的不断成熟&#xff0c;越来越多的人开始使用云桌面作为工作平台来满足自己对高效便捷工作的需求&#xff0c;而其中最为典型的就是企业内部远程协同办公系统。 那么什么是云…

InnoDB详解 (1)

文章目录1 InnoDB详解 &#xff08;1&#xff09;1 概念介绍2 页介绍1 页内部结构介绍1 File Header&#xff08;文件头部&#xff09;&#xff08;38字节&#xff09;2 File Trailer&#xff08;文件尾部&#xff09;&#xff08;8字节&#xff09;3 Free Space (空闲空间)4 U…

十、51单片机之步进电机

1、什么是步进电机 1.1、外观 1.2、概念 (1)步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号&#xff0c;转子就转动一个角度或前进一步&#xff0c;其输出的角位移或线位移与输入的脉冲数成正比&#xff0c;转速与脉冲频率成正比。因此&am…

VSCode调试C/C++项目

最近写完了自己的操作系统&#xff0c;深感有一个方便的调试环境是有多么重要&#xff0c;能够提升不少开发效率。恰好最近在的技术交流群里群友在问如何搭建VSCode调试操作系统的环境&#xff0c;刚考完试&#xff0c;就先把这篇VSCode调试C/C的通用教程发出来&#xff0c;而后…