flutter 溢出七种布局方案

简介: flutter 溢出七种布局方案

image.png


本文和大家一起讨论下溢出 效果的六种实现方案。

让我们来看一个效果。蓝色区块溢出红色区块,延伸到上方。


image.png


方案一 SizedOverflowBox

要实现这样的效果很容易想到的就是 SizedOverflowBox,复制下面的代码到 main.dart,运行后查看效果。

Container(
   color: Colors.green[400],
   width: 100,
   height: 100,
   alignment: Alignment.topCenter,
   child: SizedOverflowBox(
     size: Size.zero,
     child:
         Container(color: Colors.blue, width: 50, height: 50),
   )))));
复制代码

SizedOverflowBox 默认 会把 child 摆放在中间,所以就用了溢出一半的效果。

SizedOverflowBox 会透传 约束给 child,SizedOverflowBox 的 约束 必须是 loose,否则无法让 child 溢出。因为如果是 tight 约束 SizedOverflowBox 和 child 一样大了。

方案二 OverflowBox

实现了同样的效果,但不 SizedOverflowBox 简洁。

Container(
      color: Colors.green[400],
      width: 100,
      height: 100,
      child: OverflowBox(
        maxHeight: 150,
        child:Align(
          alignment: Alignment.topCenter,
          child:
           Container(color: Colors.blue, width: 50, height: 50))
      ))
复制代码

OverflowBox 会在父级允许的范围内尽可能的大。在本例中 OverflowBox 的大小为size(100,100)

布局解说

  1. OverflowBox 会充满绿色 container,并允许 child 可以达到 150 height
  2. Align 高度 150,OverflowBox 默认居中摆放 Align,向上溢出 25,向下溢出 25。
  3. Align 顶部分摆放 blue Container,效果上正好向上溢出 25。

方案三 stack

虽然在效果是一样的,但 stack 的本意是层叠。和 web 中 绝对定位差不多。

Stack(
   clipBehavior: Clip.none,
   alignment: Alignment.center,
   children: [
    Container( 
      color: Colors.green[400],
      width: 100,
      height: 100,),
      Positioned(
      top:-25,
      child: Container(color: Colors.blue, width: 50, height: 50))
    ]
)
复制代码

布局解说

  1. stack 和 green container 一样大。
  2. stack 根据 top:-25 ,确定上下位置,再根据 alignment: Alignment.center,确定左右位置,clipBehavior: Clip.none 允许溢出,最终效果就是左右居中,向上溢出 25。

stack 在只有 positioned 定位元素的情况下无尽量大。在本例中受到的是父级的 loose 约束,最终 size(100,100

Positioned left:0,right:0,相当于指定了 Positioned 宽度 100%,并传一个 tight 约束给 Align, Align把 tight约束转化为 loose 约束,蓝色container 最终 宽度 50,左右居中。因为 stack设置为 允许溢出,所以高度显示为 200。

方案四 transform

Container(
    color: Colors.green[400],
    width: 100,
    height: 100,
    alignment:Alignment.topCenter,
    child:Transform.translate(
      offset:const Offset(0,-25),
      child:
         Container(color: Colors.blue, width: 50, height: 50))
)
复制代码

方案五 FitteBbox

Container(
    color: Colors.green[400],
    width: 100,
    height: 100,
    child:FittedBox(
      fit: BoxFit.none,
      child:Container(
        alignment: Alignment.topCenter,
         height: 150,
         child:Container(color: Colors.blue, width: 50, height: 50)))
    )
复制代码

布局解说

  1. FittedBox 放飞 child ,高度 150
  2. FittedBox 默认居中摆放 child ,向上溢出 25。
  3. FittedBox' child 在顶部居中 blue container ,最终效果就是向上溢出 20,左右居中。

方案六 Align

Container(
      color: Colors.green[400],
      width: 100,
      height: 100,
      alignment: Alignment(0, -2),
      child: Container(color: Colors.blue, width: 50, height: 50),
)
复制代码

这不用解说了,这应该是最简单的方案了。如果对 Alignment 不熟悉可以看这里 Flutter Align 详解

方案七 CustomSingleChildLayout

用 CustomSingleChildLayout 是肯定可以的,因为它的灵活性是最大的。为了方案的完整性,把它也作为方案的一种。

总结了这些多溢出的方案,也是为了让大家了解一下,哪些组件可以溢出,就这样的能力,等遇到问题的时候,会第一时间想起来。

目录
相关文章
|
6月前
|
编解码 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的响应式设计与自适应布局
【4月更文挑战第30天】Flutter框架助力移动应用实现响应式设计与自适应布局,通过层次化布局系统和`Widget`树管理,结合`BoxConstraints`定义尺寸范围,实现自适应。利用`MediaQuery`获取设备信息,调整布局以适应不同屏幕。`FractionallySizedBox`按比例设定尺寸,`LayoutBuilder`动态计算布局。借助这些工具,开发者能创建跨屏幕尺寸、方向兼容的应用,提升用户体验。
161 0
【Flutter前端技术开发专栏】Flutter中的响应式设计与自适应布局
|
21天前
|
开发者 容器
Flutter&鸿蒙next 布局架构原理详解
本文详细介绍了 Flutter 中的主要布局方式,包括 Row、Column、Stack、Container、ListView 和 GridView 等布局组件的架构原理及使用场景。通过了解这些布局 Widget 的基本概念、关键属性和布局原理,开发者可以更高效地构建复杂的用户界面。此外,文章还提供了布局优化技巧,帮助提升应用性能。
80 4
|
21天前
|
容器
深入理解 Flutter 鸿蒙版的 Stack 布局:适配屏幕与层叠样式布局
Flutter 的 Stack 布局组件允许你将多个子组件层叠在一起,实现复杂的界面效果。本文介绍了 Stack 的基本用法、核心概念(如子组件层叠、Positioned 组件和对齐属性),以及如何使用 MediaQuery 和 LayoutBuilder 实现响应式设计。通过示例展示了照片展示与文字描述、动态调整层叠布局等高级用法,帮助你构建更加精美和实用的 Flutter 应用。
108 2
|
1月前
|
容器
Flutter&鸿蒙next 布局架构原理详解
Flutter&鸿蒙next 布局架构原理详解
|
1月前
|
Android开发 开发者 容器
flutter:&UI布局 (六)
本文档介绍了Flutter中的UI布局方式,包括线性布局(如Column和Row)、非线性布局(如Stack、Flex、Positioned)以及Wrap布局等。通过具体示例代码展示了如何使用这些布局组件来构建灵活多变的用户界面,例如使用Column垂直排列文本、使用Stack叠加组件、以及利用Wrap实现自动换行的按钮布局等。
|
2月前
|
开发框架 Dart 前端开发
Android 跨平台方案对比之Flutter 和 React Native
本文对比了 Flutter 和 React Native 这两个跨平台移动应用开发框架。Flutter 使用 Dart 语言,提供接近原生的性能和丰富的组件库;React Native 则基于 JavaScript,具备庞大的社区支持和灵活性。两者各有优势,选择时需考虑团队技能和项目需求。
358 8
|
6月前
|
开发框架 前端开发 数据安全/隐私保护
【Flutter 前端技术开发专栏】Flutter 中的布局与样式设计
【4月更文挑战第30天】本文探讨了Flutter的布局和样式设计,关键点包括:1) 布局基础如Column、Row和Stack用于创建复杂结构;2) Container、Center和Expanded等常用组件的作用;3) Theme和Decoration实现全局样式和组件装饰;4) 实战应用如登录界面和列表页面的构建;5) 响应式布局利用MediaQuery和弹性组件适应不同屏幕;6) 性能优化,避免过度复杂设计。了解并掌握这些,有助于开发者创建高效美观的Flutter应用。
188 0
【Flutter 前端技术开发专栏】Flutter 中的布局与样式设计
|
3月前
|
Android开发 C++ 开发者
Android经典实战之跨平台开发方案:Kotlin Multiplatform vs Flutter
本文对比了Kotlin Multiplatform与Flutter两大跨平台开发框架,从技术特性、性能、开发效率、UI体验、可扩展性及适用场景等维度进行了详尽分析,帮助开发者根据项目需求和技术背景选择最优方案。
134 2
|
4月前
|
容器
flutter 布局管理【详解】
flutter 布局管理【详解】
40 3
|
4月前
Flutter-自定义折叠流布局实现
Flutter-自定义折叠流布局实现
84 0