前言

层叠布局,即子组件可以根据距父容器四个角的位置来确定自身的位置。绝对定位运行子组件堆叠起来,即按照代码中声明的顺序。

Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位,Stack允许子组件堆叠,而Positioned用于根据Stack的四个角来确定子组件的位置。

接口描述

 Stack({
Key key,
// 此参数决定如何去对齐没有定位(没有使用Positioned)或部分定位的子组件。
// 所谓部分定位,在这里特指没有在某一个轴上定位:left、right为横轴,top、bottom为纵轴,只要包含某个轴上的一个定位属性就算在该轴上有定位。
this.alignment = AlignmentDirectional.topStart, // 和Row、Wrap的textDirection功能一样,都用于确定alignment对齐的参考系,
// 即:textDirection的值为TextDirection.ltr,则alignment的start代表左,end代表右,即从左往右的顺序;
// textDirection的值为TextDirection.rtl,则alignment的start代表右,end代表左,即从右往左的顺序。
this.textDirection, // 参数用于确定没有定位的子组件如何去适应Stack的大小。
// StackFit.loose表示使用子组件的大小,StackFit.expand表示扩伸到Stack的大小。
this.fit = StackFit.loose, // 此属性决定如何显示超出Stack显示空间的子组件;值为Overflow.clip时,超出部分会被剪裁(隐藏),值为Overflow.visible 时则不会。
this.overflow = Overflow.clip,
List<Widget> children = const <Widget>[],
}) const Positioned({
Key key,
// left、top 、right、 bottom分别代表离Stack左、上、右、底四边的距离
this.left,
this.top,
this.right,
this.bottom, // width和height用于指定需要定位元素的宽度和高度。
this.width,
this.height,
@required Widget child,
})

代码示例

import 'package:flutter/material.dart';

class StackTest extends StatelessWidget {

  @override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('层叠布局(Stack和Positioned)'),
),
// 通过ConstrainedBox来确保Stack占满屏幕
body: ConstrainedBox(
constraints: BoxConstraints.expand(),
child: Stack(
// 指定未定位或部分定位widget的对齐方式
alignment: Alignment.center,
// 未定位widget会占满Stack整个空间
fit: StackFit.expand,
children: <Widget>[
Container(
child: Text('Hello world', style: TextStyle(color: Colors.white),),
color: Colors.red,
),
Positioned(
left: 18.0,
child: Text('I am hah'),
),
Container(
child: Text('Hello ', style: TextStyle(color: Colors.white),),
color: Colors.red,
),
Positioned(
top:18.0,
child: Text('Your dear!'),
), ],
), ),
);
}
}

Flutter 布局类组件:层叠布局(Stack和Positioned)的更多相关文章

  1. Flutter 布局类组件:简介

    前言 布局类组件都会包含一个或多个子组件,不同的布局类组件对子组件排版(layout)方式不同. 我们知道,Element树才是最终的绘制树,Element树是通过Widget树来创建的(通过Widg ...

  2. Flutter 布局类组件:流式布局(Wrap和Flow)

    前言 把超出屏幕显示范围会自动折行的布局称为流式布局.Flutter中通过Wrap和Flow来支持流式布局,将Row换成Wrap后溢出部分则会自动折行. Wrap 接口描述 Wrap({ Key ke ...

  3. Flutter 布局类组件:线性布局(Row和Column)

    前言 所谓线性布局,即指沿水平或垂直方向排布子组件.Flutter中通过Row和Column来实现线性布局,并且它们都继承自弹性布局(Flex). 接口描述 Row({ Key key, // 表示子 ...

  4. 你真的会用Flutter日期类组件吗

    Flutter系统提供了一些日期选择类组件,比如DayPicker.MonthPicker.YearPicker.showDatePicker.CupertinoDatePicker等,其中前4个为M ...

  5. Flutter 布局类组件:弹性布局(Flex)

    前言 弹性布局允许子组件按照一定比例来分配父容器空间,Flutter中的弹性布局主要通过Flex和Expanded来配合实现. Flex Flex组件可以沿着水平或垂直方向排列子组件,如果你知道主轴方 ...

  6. 【Flutter】布局类组件之对齐和相对定位

    前言 如果只想简单的调整一个子元素在父元素中的位置的话,使用Align组件会更简单一些. 接口描述 const Align({ Key key, // 需要一个AlignmentGeometry类型的 ...

  7. Flutter 裁剪类组件 最全总结

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 ClipRect ClipRect组件使用矩形裁剪子组件, ...

  8. 11Flutter页面布局 Stack层叠组件 Stack与Align Stack与Positioned实现定位布局

    /* Flutter 页面布局 Stack层叠组件: Stack与Align Stack与Positioned实现定位布局: Flutter Stack组件: Stack表示堆得意思,我们可以用Sta ...

  9. 技术胖Flutter第三季-16Stack层叠布局

    16Stack层叠布局 在上面声明一个变量Stack里面包含两个元素,第一个 是CircleAvater第二个子对象是Container 效果 把文字房子啊中下的位置: 我们需要对齐属性 包含了x轴和 ...

随机推荐

  1. 从 0 开始的min_max容斥证明

    二项式反演 \[f_n=\sum\limits_{i=0}^nC^i_ng_i \Leftrightarrow g_n=\sum\limits_{i=0}^n{(-1)}^{n-i}f_i \] 证明 ...

  2. 服务器ganglia安装(带有登录验证)

    1.ganglia组件gmond相当于agent端,主要手机各node的性能状态:gmetad相当于server端,从gmond以poll的方式收集和存储原数据:ganglia-web相当于一个web ...

  3. 传输层-Transport Layer(上):传输层的功能、三次握手与四次握手、最大-最小公平、AIMD加法递增乘法递减

    第六章 传输层-Transport Layer(上) 6.1传输层概述 在之前的几章内容中,我们自底向上的描述了计算机网络的各个层次,还描述了一些处于不同层次下的经典网络协议(如以太网.无线局域网.或 ...

  4. tengine下载和安装

    tengine简介: Tengine所基于开发的Nginx的意思是Engine-X,Tengine在淘宝开发,所以我们把Engine-X中的X替换成Taobao.Tengine即Taobao-Engi ...

  5. Mybatis学习-日志与分页

    日志 为什么需要日志 如果一个数据库操作出现了异常,需要排错,那么日志就是最好的助手 Mybatis通过使用内置的日志工厂提供日志功能,有一下几种实现方式: SLF4J Apache Commons ...

  6. Scala中的IO操作及ArrayBuffer线程安全问题

    通过Scala对文件进行读写操作在实际业务中应用也比较多,这里介绍几种常用的方式,直接上代码: 1. 从文件中读取内容 object Main { def loadData(): Array[Stri ...

  7. Linux OOM Killer造成数据库访问异常排查

    服务器上的服务器访问异常,查看/va/log/messages发现如下: Sep 22 16:08:21 safeserver kernel: java invoked oom-killer: gfp ...

  8. eclipse中字体、XML字体设置

    [修改编辑区中文字体大小]: Window > Preferences > General > Appearance > Colors and Fonts > Java ...

  9. python的常用内建模块与常用第三方模块

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 一.常用内置模块1.datetimePython 提供了一个 time 和 calendar 模块可 ...

  10. HCIP --- BGP属性

    传播范围                 默认值              大优或小优 1. Preference_Value     不传播                      0       ...