Flutter灵活布局要掌握的两个控件Expanded和Flexible

news/2024/10/17 22:23:08/

Expanded和Flexible介绍

在Flutter中,Expanded和Flexible是两个用于控制子组件尺寸的Widget,它们都可以用于实现灵活的布局。

Expanded Widget会自动将子组件的尺寸扩展到父组件剩余的空间,而 Flexible Widget 则会自动调整子组件的尺寸以适应父组件的尺寸。

具体来说,Expanded Widget 会尽可能地扩展子组件的大小,以使其占据父组件的所有可用空间。如果需要控制子组件的最大和最小尺寸,可以使用Expanded的child属性,将子组件包装在一个ConstrainedBox中。

举例

示例代码:

Expanded(child: ConstrainedBox(constraints: BoxConstraints(minWidth: 100,maxWidth: 200,minHeight: 50,maxHeight: 100,),child: Text('Hello World'),),
)

Flexible Widget则提供了更大的灵活性,它可以让子组件根据需要自动调整大小,以适应父组件的尺寸。和Expanded不同,Flexible Widget会在必要时缩小子组件的大小,以保持子组件在父组件中的可见性。

示例代码:

Flexible(child: Text('Hello World'),
)

在使用Expanded和Flexible时,需要注意以下几点:

  1. Expanded和Flexible只能包含一个子组件。如果需要包含多个子组件,可以将它们包装在一个Row或Column中。

  2. Expanded和Flexible必须放在Row或Column等Flex容器中使用。

  3. Expanded可以直接设置子组件的最大和最小尺寸,而Flexible则不能。

  4. 如果需要同时设置子组件的最大和最小尺寸,可以在Flexible的child属性中使用ConstrainedBox。

总之,Expanded和Flexible都是用于实现灵活布局的重要Widget,根据实际需求选择合适的Widget来控制子组件的尺寸,能够更好地实现UI界面的设计。

常见错误的解决方法

我们通常会遇到"BoxConstraints forces an infinite height"类似这样的错误,这个错误通常是由于子组件需要在父组件的高度方面进行自适应布局,但是父组件没有提供高度约束导致的。

在Flutter中,父组件可以通过BoxConstraints对象来制定子组件的最小和最大宽度和高度。如果父组件没有提供高度约束,那么子组件将无法计算自己的高度,因此会抛出"BoxConstraints forces an infinite height"错误。

要解决这个问题,可以使用Expanded或Flexible组件来给子组件提供高度约束。这两个组件都可以让子组件在父组件的高度方面进行自适应布局。

例如,下面是一个使用Expanded组件的示例:

Expanded(child: Container(color: Colors.blue,),
)

在上面的示例中,Expanded组件包装了一个Container组件。由于Expanded组件的存在,Container组件将获得父组件的剩余空间,因此可以自适应计算自己的高度。

除了Expanded和Flexible组件,可以使用其他一些Widget来提供高度约束,例如SizedBox、ConstrainedBox或AspectRatio等。只要父组件提供了足够的高度约束,就不会再出现"BoxConstraints forces an infinite height"错误。


http://www.ppmy.cn/news/192619.html

相关文章

计算机的cpu达到100%,cpu100怎么办 cpu100解决方法【详细介绍】

对当代人来说没有电脑是十分不便的。在生活中有了电脑我们就可以足不出户的了解到世界各地的资讯,在工作中有了电脑我们的工作效率明显大大提高。这些都是电脑给我们带来的优点。不过电脑用久了,就会出现一系列的问题。比如说:蓝黑屏&#xf…

信息与编码 SCUEC DDDD 期末考试整理(2)

1.求下面三种信道的信道容量 行列数量相等的情况 行比列多的情况 列比行多的情况 小贴士 2.客观世界三大基本要素:物质,能量,信息。 3.信息:是对事物运动状态和变化方式的表征,它存在于任何事物之中,可以…

Python编程入门指南

Python是一种强大的编程语言,广泛应用于数据科学、Web开发、自动化等各个领域。如果您是编程新手或想学习Python,这篇入门指南就是为您准备的。 在本文中,我们将介绍Python编程的基础知识,包括: 安装Python运行Python…

张小飞的Java之路——第四十四章——其他流对象

写在前面: 视频是什么东西,有看文档精彩吗? 视频是什么东西,有看文档速度快吗? 视频是什么东西,有看文档效率高吗? 诸小亮:这一节,我们介绍一下其他不常用的流对象 …

2023年第三届陕西省大学生网络安全技能大赛--本科高校组 Reverse题解

文章目录 一. 我的upx -d怎么坏了1. 查看节区信息2. 动态调试脱壳3.输出迷宫图4.走迷宫 二. babypython1.字节码简单分析2. gpt分析3. 程序逻辑4.解题脚本 三. BadCoffee1. 相关文章2.解混淆3.解题脚本 四. Web&Assembly(暂时没复现出来,提供一些相关文章)总结 这次比赛做出…

vostro3070装win7_戴尔vostro13-5370笔记本用大包菜U盘安装win7系统的操作教程

戴尔vostro13-5370笔记本机身最薄处仅为15.81mm,重量约为1.41kg,外出携带非常轻松。配备了一块13.3英寸的全高清IPS屏幕,可视角度广,色域高,显示效果好。配备了i5-8250U第八代处理器,内置8GB内存&#xff0…

关于DELL Precision 7550设置U盘启动的方法

关于DELL Precision 7550设置U盘启动的方法 说明步骤 说明 本文测试的电脑为DELL Precision 7550,设置U盘启动的方法。是Windows10 Ubuntu18.04 双系统下修复GRUB引导博文实现的前提。 步骤 1.开机后一直按 F2,出现如下界面 2.按照下图将"Sour…

dell灵越7370 U盘装机 BIOS设置

搞了一晚上,写一下心得。 首先是设置U盘启动,这个网上有但不一定一样。要设置4个地方 步骤: 1、开机按F12进入系统设置选项,选择BIOS Setup进入BIOS设置 2、选择security->PTT security,把第一个PTT On的勾选项…