首页 > 其他分享 >Flutter灵活布局要掌握的两个控件Expanded和Flexible

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

时间:2023-06-03 22:33:47浏览次数:42  
标签:控件 Widget Expanded 尺寸 child 组件 Flexible

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"错误。

标签:控件,Widget,Expanded,尺寸,child,组件,Flexible
From: https://blog.51cto.com/u_15777557/6409033

相关文章

  • WPF 入门笔记 - 03 - 样式基础及控件模板
    ......
  • WPF中的Image控件上传,保存,显示头像
    WPF中的Image控件上传,保存,显示头像//选择电脑上的图片显示到Image控件中privatevoidbtnUpload_Click(objectsender,RoutedEventArgse){//打开文件对话框以选择要上传的图片OpenFileDialogopenFileDialog=newOpenFi......
  • c# winfrom中 dateTimePicker 控件设置自动获取上个月,当月,下个月,前好几个月,后好几个月
    我这里用的是vs2022开发,将获取的时间赋值给dateTimePicker控件进行筛选1、从工具箱中托取一个dateTimePicker控件,我这里将该控件命名为RQ,代码为RQ.value=时间代码2、时间的获取:今天:RQ.Value=DateTime.Now;本月第一天:RQ.Value=DateTime.Now.AddDays(1-DateTime.Now.Day......
  • flutter-基础控件
    资料Flutter控件之ScaffoldWidgetScaffoldScaffold有下面几个主要属性:appBar:显示在界面顶部的一个AppBar,也就是Android中的ActionBar、Toolbarbody:当前界面所显示的主要内容WidgetfloatingActionButton:纸墨设计中所定义的FAB,界面的主要功能按钮persistentFooterButtons:固......
  • 利用Flutter的LayoutBuilder、BoxConstraints创建自适应布局控件
    简介在Flutter中,LayoutBuilder是一个Widget,用于构建一个包含父组件约束的子组件。它可以获取父组件的约束信息并将其传递给子组件进行布局。LayoutBuilder的主要作用是让子组件根据父组件的大小进行自适应布局。LayoutBuilder的作用是在子控件构建之前获取父级容器的大小,并将其传......
  • Layout()方法用于布局管理器的更新,解决panel刷新后其中控件挤作一坨的问题
    在wxPython中,Layout()方法用于布局管理器的更新。它会告诉布局管理器重新计算和调整子控件的大小和位置。一般来说,当您:-添加或删除子控件-隐藏或显示子控件-改变子控件的大小-改变容器的大小这些情况下,您需要调用Layout()方法,告诉布局管理器进行重新布局。例如,在BoxSiz......
  • 转载:用pageOffice控件实现 office word文档在线编辑另存为pdf的功能
    用pageOffice控件实现officeword文档在线编辑另存为pdf的功能1应用场景OA办公中,经常要将word文档转存为pdf方法,方式文档的查看。怎么实现word文档的转存为pdf呢?2实现方法通过pageOffice实现简单的在线打开编辑word后,只要增加一行document.getElementById("PageOfficeCt......
  • layui 日期控件问题
    日期控件正常可弹出,点击返回,设置页面隐藏后,再显示,日期控件不弹出。//返回列表$('#backList').on('click',function(){$('#xxx').hide();$('#yyyy').show();$(window).trigger('resize');});日期控件渲染的时候需要清除lay-key......
  • 如何绑定Property以实现控件属性同步
    如何绑定Property以实现控件属性同步控件的属性往往是各种Property,比如StringProperty,IntegerProperty。它们有着特殊的性质:可以在其上添加一个监听函数,在属性发生变化时自动调用可以绑定另一个Property,从而同步变更效果展示示例代码importjavafx.application.A......
  • 界面控件DevExpress ASP.NET新主题——Office 365暗黑主题的应用
    DevExpressASP.NET WebFormsControls拥有针对Web表单(包括报表)的110+种UI控件,DevExpressASP.NETMVCExtensions是服务器端MVC扩展或客户端控件,由轻量级JavaScript小部件提供支持的70+个高性能DevExpressASP.NETCoreControls,包含功能完善的报表平台。在之前发布的v22.1版......