Flutter SizedBox布局组件Widget使用示例详解
作者:IAM17 发布时间:2022-02-08 18:19:44
Flutter Sizedbox 是一个 布局组件,用来给 child 添加 tight 约束的,也可以用来添加空白。
width,height是 Sizedbox 的参数
BoxConstraints get _additionalConstraints {
return BoxConstraints.tightFor(width: width, height: height);
}
final BoxConstraints constraints = this.constraints;
if (child != null) {
child!.layout(_additionalConstraints.enforce(constraints),
parentUsesSize: true);
size = child!.size;
} else {
size = _additionalConstraints.enforce(constraints).constrain(Size.zero);
}
enforce 方法根据 _additionalConstraints
返回一个新约束,新约束保证在参数 constraints
的范围之内。
child 的 constrains
constrains 是 tight ,SizedBox 透传 constrains 给 child。
constrains 是 loose,width 为空,SizedBox 透传 minWidth,maxWith 给 child;height为空,SizedBox 透传 minHeight,maxHeight 给 child。
constrains 是 loose,width 不为空, 在 constrains 范围内 给 child 的 width tight 约束;height 不为空 在 constrains 范围内 给 child 的 height tight 约束。
确定自己的大小
如果有 child ,和 child 一样大。
没有child ,constrains 是 tight ,大小为约束最小值。
没有child ,constrains 是 loose,在约束范围内由 width,height 参数指定。
SizedBox 的命名构造函数们
SizedBox 虽然本身很简单,但它命名构造函数确实不少。我们平时用的时候大多忽略了这些命名构造函数,所以应该先混个脸熟,用这些命名构造函数还是有好处的,可以增加代码的可读性。
SizedBox.expand
使 SizedBox 获得最大 Size,也就是和父 widget 一样大。
const SizedBox.expand({ super.key, super.child })
: width = double.infinity,
height = double.infinity;
SizedBox.shrink
让 SizedBox 尽量小。
const SizedBox.shrink({ super.key, super.child })
: width = 0.0,
height = 0.0;
SizedBox.fromSize
通过 size 来构造 SizedBox。
SizedBox.fromSize({ super.key, super.child, Size? size })
: width = size?.width,
height = size?.height;
SizedBox.square
保证 SizedBox 是一个正方形。
const SizedBox.square({super.key, super.child, double? dimension})
: width = dimension,
height = dimension;
应用场景
为 child 提供 tight 约束。
当指定了 width,height 参数后,child 就获得了宽高的 tight 约束。保证 child 有固定大小。这对于固定布局非常有用。
为 children 之间提供空白。
可以用 padding 添加空白,但那样会增加一层嵌套,用 SizedBox 充当空白看起来更好一些。
占位
只是用来占位,比如 Spacer 中的 child 用的就是 SizedBox.shrink。
class Spacer extends StatelessWidget {
const Spacer({super.key, this.flex = 1})
: assert(flex != null),
assert(flex > 0);
final int flex;
@override
Widget build(BuildContext context) {
return Expanded(
flex: flex,
child: const SizedBox.shrink(),
);
}
}
来源:https://juejin.cn/post/7167880704699662367
猜你喜欢
- MyBatis if test 判断字符串相等不生效采用 MyBatis 框架操作 MySQL 数据库时,判断传入的字符串 priceFla
- 具体安装步骤,不再赘述,仅附上个人工作、学习中的对 EasyCode 的详细配置。插件链接地址:https://gitee.com/make
- java 使用DecimalFormat进行数字的格式化实例详解简单实例://获取DecimalFormat的方法DecimalFormat
- 本文是精讲RestTemplate第6篇,前篇的blog访问地址如下:RestTemplate在Spring或非Spring环境下使用精讲R
- 用java swing写的一个简单的五子棋游戏。下面是Main.java。package com.crossing.main;import
- 什么是FTPFTP(File Transfer Protocol)是TCP/IP网络上两台计算机传送文件的协议,使得主机间可以共享文件.可以
- final可以修饰类 ,成员变量,局部变量和方法。1.final修饰成员变量1.final成员变量的初始化对于final修饰的变量,系统不会
- 今天一上班 被github上的一篇名为《教你用python玩跳一跳》吸引,它的星也瞬间从3400涨到4400 原作者主要就是用py
- 前言日常的Android开发中,我们会用到IntentFilter的匹配规则。IntentFilter的主要规则分为action、categ
- 要点1:cmd命令行的输入命令netsh wlan set hostednetwork mode=allow ssid=用户名
- 如下:public static void CreateConfig(){ //c#可以添加内置的app.conf
- 前言关键字Final不仅可以用来修饰变量,而且对类及其方法的继承也有很大的影响,本文将从类与方法两个方面介绍final关键字的功能。Fina
- 本文实例为大家分享了使用aop实现全局异常处理的具体代码,供大家参考,具体内容如下日常业务中存在的问题使用大量的try/catch来捕获异常
- 在javaweb中写了一个图片的链接,可以打开预览,另外提供一个下载功能。以下是预览代码,没什么好说的;href若连接的是一个压缩包文件之类
- 本文实例讲述了C#实现中英文混合字符串截取的方法,是C#字符串操作中非常常用的一个方法。分享给大家供大家参考之用。具体方法如下:具体功能代码
- 一、概述本质上,这是一个包含有可选值的包装类,这意味着 Optional 类既可以含有对象也可以为空。Optional 是 Java 实现函
- 文档更新说明2018年09月24日 v1.0 初稿代理在生活中很常见,比如说婚介网站,其实就是找对象的代理;还有社保代理、人事代理;还有找黄
- java中找不到符号问题 java找不到符号如果你的代码里没有报错,明明是存在的。但是java报错找不到符号。像下面这样子。解决步
- 分组类控件主要包括容器控件(Panel),分组框控件(groupBox)和选项卡控件(TabControl)等控件。一、Panel控件Pan
- 快捷键是很多软件的常用功能,本文实例讲解了三种方法来实现C# button快捷键,如Alt + *(按钮快捷键),Ctrl+*及其他组合键等