文章目录

  • 层叠 Widget 布局
    • Stack
      • alignment
      • fit
      • overflow
    • Positioned
  • 上文 Flutter 多子 Widget 布局之Flex、Expanded、Wrap、Flow,介绍了弹性布局 Flex、Expanded和流式布局Wrap、Flow
  • 再上文 Flutter 多子 Widget 布局之线性布局 Row、Column,介绍了线性布局Row、Column组件

层叠 Widget 布局

层叠布局,类似于Android中的FrameLayout,可以将布局叠加在另一个布局上。
Flutter中可以通过StackPositioned来实现相同的效果。

Stack

将控件叠加在另一个控件的上面,比如在一张图片上放置一段文字。

查看构造函数,看看都支持哪些属性:

Stack({Key key,this.alignment = AlignmentDirectional.topStart,// 定位方向this.textDirection,// 和 Row Column 中一致,用于决定控件的摆放方向this.fit = StackFit.loose,// 子控件适应 Stack 的大小模式this.overflow = Overflow.clip,// 子控件超出 Stack 的显示空间的显示模式List<Widget> children = const <Widget>[],// 子控件集合})

接下来,详细看看各个参数支持的值。

alignment

alignment支持以下值:center, bottomCenter, bottomEnd, bototmStart, centerEnd, centerStart, topCenter, topStart, topEnd,各个参数从字面意思也能理解。


直接上效果图看各参数具体的显示:这里只展示topStart, topCenter, bottomEnd,其他参数的显示效果也是类似。
主要看 四个颜色(蓝黄绿红)方块层叠的位置!



伪代码如下:

Stack(alignment: AlignmentDirectional.bottomEnd,children: <Widget>[Container(width: 350,height: 350,color: Colors.red,alignment: Alignment.topLeft,// 改变文本的显示位置,为了展示效果,这个值需要跟随 stack 的 alignment 改变child: Text('bottomEnd',style: TextStyle(color: Colors.white),),),Container(width: 250,height: 250,color: Colors.green,alignment: Alignment.topLeft,child: Text('bottomEnd',style: TextStyle(color: Colors.white),),),Container(width: 150,height: 150,color: Colors.yellow,alignment: Alignment.topLeft,child: Text('bottomEnd',style: TextStyle(color: Colors.white),),),Container(width: 50,height: 50,color: Colors.blue,alignment: Alignment.topLeft,child: Text('bottomEnd',style: TextStyle(color: Colors.white),),),],
)

fit

fit支持以下值:expand, loose, passthough

  • StackFit.loose:默认效果,非 Positioned子组件可取最小到最大这个区间内的值,如Stack添加宽高 350*600 的约束,那么子组件宽取值区间为0-350,高取值区间为0-600
  • StackFit.expand:子组件取最大尺寸,如Stack添加宽高 350*600 的约束,那么子组件的宽为350,高为600
  • StackFit.passthrough:不改变子组件约束条件。

效果示例:

StackFit.expand 效果伪代码实现:

Stack(fit: StackFit.expand,children: <Widget>[Container(width: 350,height: 350,color: Colors.red,alignment: Alignment.topLeft,// 改变文本的显示位置,为了展示效果,这个值需要跟随 stack 的 alignment 改变child: Text('expand',style: TextStyle(color: Colors.white),),),Container(width: 50,height: 50,color: Colors.blue,alignment: Alignment.topLeft,child: Text('expand',style: TextStyle(color: Colors.white),),),],
)

loose, passthrough字段,暂时没想到示例,就不放效果图了。

overflow

overflow支持以下值:expand, loose, passthough

  • Overflow.clip: 默认效果,超出Stack部分会被剪裁(隐藏),
  • Overflow.visible 超出Stack部分不会被剪裁(隐藏)。

示例效果图:
原文源码:在Flutter中,定位的Widget如何在其父Stack区域之外点击?

Positioned

Positioned 可以设置子 Widget 位置

查看构造函数,看看都支持哪些属性:

const Positioned({Key key,this.left,// 离 Stack 左边的距离this.top,// 离 Stack 上边的距离this.right,// 离 Stack 右边的距离this.bottom,// 离 Stack 底边的距离this.width,// child 的宽度this.height,// child 的高度@required Widget child, // 子控件})

示例效果图:

示例伪代码:

Stack(children: <Widget>[Container(color: Colors.yellow, width: 300, height: 300),//黄色容器Positioned(left: 18.0,top: 18.0,child: Container(color: Colors.green, width: 50, height: 50),//叠加在黄色容器之上的绿色控件),Positioned(left: 18.0,top:70.0,child: Text("距离左边距 18,上边距 70 的文本"),),Positioned(right: 18.0,top:170.0,child: Text("距离右边距 18,上边距 170 的文本"),)],
)

完~

Flutter 多子 Widget 布之Stack、Positioned相关推荐

  1. 【Flutter组件】层叠布局 Stack、Positioned

    层叠布局(Stack)和 Web 中的绝对定位.Android 中的 FrameLayout 布局是相似的,子组件可以根据距父容器四个角的位置来确定自身的位置.层叠布局允许子组件按照代码中声明的顺序堆 ...

  2. flutter 布局 Stack Positioned的混合操作 两个组件Container重叠 构建背景圆角操作 类似css的relative

    flutter 布局 Stack Positioned的混合操作 两个组件Container重叠 构建背景圆角操作 首先看一下需求 需要在这里加一个背景圆角,涉及到两个组件Container的重叠 我 ...

  3. 12、 Flutter Widgets 之 Stack,Positioned叠加组件

    Stack/Positioned是用来做页面布局定位的组件,需要结合使用 Stack children:一个数组,里面可放多个Widget alignment:Alignment.topCenter/ ...

  4. Flutter学习 Widget简介

    目录 1. Widget 概述 1.1 Widget概念 1.2 Widget 分类 2. Widget 接口 3. StatelessWidget 和 StatefulWidget 3.1 Flut ...

  5. Flutter 学习 - Widget 之 对话框

    前言 本篇我们介绍Flutter中常用的对话框,先看下效果图 正文 Flutter 中对话框也是Widget,有两种显示对话框的方法,对于对画框对使用还有特殊要求,我们后面介绍,先来看下这两种方法 1 ...

  6. 【Flutter】Flutter 布局组件 ( FractionallySizedBox 组件 | Stack 布局组件 | Positioned 组件 )

    文章目录 一.FractionallySizedBox 组件 二.Stack 布局组件 三.Positioned 组件 四. 完整代码示例 五. 相关资源 一.FractionallySizedBox ...

  7. 笔录Flutter (六) 布局系列: Stack、Positioned、Align

    Flutter练习demo 常用属性 关于alignment的使用 使用这些属性 直接使用Alignment(x, y) x.y两个值的范围在 -1 到 1 之间.如图: 坐标的圆点表示center, ...

  8. Flutter组件--重叠布局/相对布局(Stack,Positioned组件)

    1.Flutter Stack组件 Stack表示堆的意思,我们可以用Stack或者Stack结合Align或者Stack结合 Positiond来实现页面的定位布局 属性 说明 alignment ...

  9. Android学习Flutter的Widget

    在Android中,View是屏幕上显示的所有内容的基础, 按钮.工具栏.输入框等一切都是View. 在Flutter中,View相当于是Widget.以下的一些常见的Widget以及我们常用到的属性 ...

最新文章

  1. Python学习日志(5)- Numpy
  2. POJ 1944 - Fiber Communications
  3. 【转】推荐10本C#编程的最佳书籍
  4. ELK 经典用法—企业自定义日志收集切割和mysql模块
  5. mybatis实现CRUD(不使用DAO)
  6. 在html中样式表的三种类型,css样式有哪几种类型?
  7. juns java,学习动态性能表第六篇-(1)-V$SESSION_WAIT 转自三思 http://junsansi.itpub.net/post/29894/292373...
  8. 自考专科计算机信息管理专业好,计算机信息管理(专科)专业介绍
  9. 检索方法应该返回#39;null#39;还是无法产生返回值时引发异常? [关闭]
  10. 安装appcan后打开eclipse出错
  11. 使用AVR-GCC编程Arduino
  12. R语言:决策树结果可视化
  13. 【Linux】ROS机器人操作系统的安装与使用
  14. UFS Host基础特性分析 -- 软件部分
  15. 常见文件存储系统的解决方案
  16. ext4文件系统布局
  17. Inference与predicting的区别
  18. Photoshop抠头发丝超简单方法 PS抠头发
  19. 韦棋宝画柿子//作品欣赏
  20. Java 性能优化之——缓冲区如何让代码加速

热门文章

  1. Linux 2.6下Driver开发的34个变化[转贴]
  2. System.arraycopy()详解
  3. html调用手机陀螺仪,前端基于THREE.js的3D全景,支持鼠标控制和手机陀螺仪的切换...
  4. MySQL的while循环
  5. matlab /simulink车辆防抱死制动系统ABS建模仿真
  6. 盘一盘 Python 系列 - Cufflinks (下)
  7. OpenCV — 人脸识别
  8. 华为p10多屏互动在哪_华为p10如何投屏到电视?手机还有这些使用技巧
  9. RTFM — man
  10. 白嫖小程序云存储空间,手撸你的专属云盘