Flutter - Stack 与 Positioned 层叠布局

news2025/1/11 20:49:26

1 层叠布局和 Web 中的绝对定位、Android 中的 Frame 布局是相似的
2 子组件可以根据距父容器四个角的位置来确定自身的位置。
3 层叠布局允许子组件按照代码中声明的顺序堆叠起来。
4 Flutter中使用Stack和Positioned这两个组件来配合实现绝对定位。
5 Stack允许子组件堆叠,而Positioned用于根据Stack的四个角来确定子组件的位置。

下图为Stack 内的三个控件
一个在正中间 ,
一个在上方中部
一个在左方中部
在这里插入图片描述
先上代码,在说过程

ConstrainedBox(
  constraints: BoxConstraints.tightFor(width: double.infinity,height: 180),
  child: Container(
    color: Colors.blue[100],
    child: Stack(
      alignment: Alignment.center, // 未定位的子控件 在中间显示
      children: <Widget>[
        Container(
          child: Text("center正中间",style: TextStyle(color: Colors.white)),
          color: Colors.red,
        ),
        Positioned(
          left: 18.0,
          child: Text("左边中间"),
        ),
        Positioned(
          top: 18.0,
          child: Text("顶部中间"),
        ),
      ],
    ),
  ),
),

Stack
1 Stack 层叠布局 的基础 , 在他的内部 如果需要给控件定位的话 ,需要与Positioned 配合使用

1 第一个属性 alignment

// alignment 是 Stack 的一个比较重要的属性, 
// 他的主要作用是,给它内部没有定位的控件提供一个默认的显示位置
this.alignment = AlignmentDirectional.topStart,

AlignmentDirectional 定位的参数 ,
有九个值

 topStart  ,       topCenter ,      topEnd
 centerStart ,      center ,        centerEnd
 bottomStart ,   bottomCenter ,     bottomEnd

从上面九个值的位置就可以看出来 ,他们作用,

同时 AlignmentDirectional 可以用 Alignment 代替

topLeft     topCenter     topRight
centerLeft   center       centerRight
bottomLeft  bottomCenter  bottomRight

2 第二个属性 fit

//此参数用于确定没有定位的子组件如何去适应Stack的大小。
//StackFit.loose表示使用子组件的大小,
//StackFit.expand表示扩伸到Stack的大小。
this.fit = StackFit.loose,

Positioned
在 Stack 中 用来定位的 ,他的属性就是 上下左右,宽和高,

const Positioned({
    super.key,
    this.left,
    this.top,
    this.right,
    this.bottom,
    this.width,
    this.height,
    required super.child,
  }) : 

不过需要注意的是 ,这里的 width 和 height 和别的地方的宽高 有一些不一样,

在 Positioned 中 ,left , right , width 三个属性, 最多可以同时使用两个 ,如果三个都使用的话则会报错
内部的计算规则是 ,通过 left+width 算出 最后right ,也就是通过使用的两个值,算出最后一个 垂直同理


// 上面代码 ,Container 没有使用Positioned定位, 
// 所以 受 Stack 的约束
// alignment: Alignment.center, // 未定位的子控件 在中间显示
Container(
 child: Text("center正中间",style: TextStyle(color: Colors.white)),
 color: Colors.red,
),
// Positioned 约束了 left属性, 在水平方向上,在左方显示
// 未约束 垂直方向的属性,
// 所以 受 Stack 的约束
// alignment: Alignment.center, // 未定位的子控件 在中间显示
// 最后现在在 左边中间
Positioned(
 left: 18.0,
 child: Text("左边中间"),
),

Stack
2 Stack 层叠布局允许子组件按照代码中声明的顺序堆叠起来
就是后面的控件 ,如果有背景,会吧前面的布局盖住

在这里插入图片描述

ConstrainedBox(
  constraints: BoxConstraints.tightFor(width: double.infinity,height: 180),
  child: Container(
    color: Colors.blue[100],
    child: Stack(
      fit: StackFit.expand, // 未定位的空间 最大化,和父控件大小相同
      alignment: Alignment.center, // 未定位的子控件 在中间显示
      children: <Widget>[
        Positioned(
          left: 18.0,
          child: Text("左边中间"),
        ),
        Container(
          child: Text("center正中间",style: TextStyle(color: Colors.white)),
          color: Colors.red,
        ),
        Positioned(
          top: 18.0,
          child: Text("顶部中间"),
        ),
      ],
    ),
  ),
),

重点

fit: StackFit.expand, // 未定位的空间 最大化,和父控件大小相同

Container( 
// 未定位 受fit的影响 大小和父控件大小相同 ,
// 且在第二位 所以会盖住"左边中间"这个控件
  child: Text("center正中间",style: TextStyle(color: Colors.white)),
  color: Colors.red,
),

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/75132.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

什么是数据为先营销?为什么它对市场部如此重要?

数据为先营销希望能帮助各地的市场人员与高管们建立联系&#xff0c;实现这些商业目标&#xff0c;并真正学会如何适当地跟踪一切数据&#xff0c;这样他们就知道自己是否真的达到了收入目标&#xff0c;ROI&#xff0c;这些商业目标&#xff0c;而不是仅仅说我们是被数据驱动型…

先进的数字隔离技术提高了太阳能逆变器的可靠性

介绍 一个多世纪以来&#xff0c;化石燃料发电设施一直被证明是坚固可靠的能源&#xff0c;但这些久经考验的电力设施规模大、复杂&#xff0c;而且建造成本越来越高。以最小的碳足迹和环境影响清洁地操作它们也具有挑战性和成本高昂。相比之下&#xff0c;现代光伏&#xff0…

CSDN涨粉就这几招

目录说明涨粉不可不知的几件事几个常规的涨粉之道CSDN的数据运营之道粉丝列表关注列表关注某人取消关注获得某个用户的主要信息&#xff1a;昵称、排名、原创数、粉丝数等其它数据有了数据&#xff0c;怎么涨粉&#xff1f;说明 直到今年&#xff0c;我才开始重视涨粉&#xf…

_2LeetCode代码随想录算法训练营第二天C++

_2LeetCode代码随想录算法训练营第二天C LeetCode 题目列表&#xff1a; 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 题目所述数组含有负数。 双指针的思路 双指针的思路&#xff1a; 最大元素一定是在两边&#xff0c;考虑用两个指针逐步…

PHY寄存器解读

以太网PHY寄存器分析 1 1、以太网PHY标准寄存器分析 2 1.1 Control Register 2 1.2 Status register 5 1.3 PHY Identifier Register 8 1.4 Auto-Negotiation Advertisement Register 8 1.5 Auto-Negotiation Link Partner Base Page Ability Register…

NY CREATE和Bleximo宣布达成新量子计算研发合作

&#xff08;图片来源&#xff1a;网络&#xff09; 12月7日&#xff0c;全栈量子计算系统集成公司Bleximo Corp.宣布&#xff1a;计划将其原型设计和营销业务扩展到纽约北部的奥尔巴尼纳米技术综合体(Albany NanoTech Complex)。该公司还将与纽约研究、经济发展、技术、工程和…

llvm编译、自带例子toy、llvm编译报错解决、.lib中搜索指定函数名

hunterzju/llvm-tutorial cs.cmu.edu/academic/class/15745-s14/public/lectures 编译llvm cd /d d:\llvm-home\ git clone gitgitcode.net:pubz/llvm-project.gitcd /d d:\llvm-home\llvm-project\ git status #HEAD detached at llvmorg-11.0.0set PATH%PATH%;D:\Python38\S…

ImmunoChemistry丨艾美捷NIR-FLIVO 690游离染料对照试验说明书

ImmunoChemistry艾美捷ICT近红外&#xff08;NIR&#xff09;-FLIVO示踪剂与无NIR-FLIVO染料对照分析结合使用。无NIR-FLIVO染料控制试验使用无NIR-FRIVO染料检测试剂&#xff08;*Dylight690游离染料&#xff09;。注射时&#xff0c;游离染料对照物和示踪物试剂都会产生荧光信…

Java集合 超详细版+面试题

程序总是根据运行时才知道的某些条件去创建新的对象。在此之前&#xff0c;无法知道所需对象的数量甚至确切类型。为了解决这个普遍的编程问题&#xff0c;需要在任意时刻和任意位置创建任意数量的对象。下面讲详细介绍如何使用标准库中的集合类。 集合框架图 简化图&#xff…

遗传算法求解问题(1)

问题描述 在一个长度为 n 的数组中选择 10 个元素&#xff0c;使得 10个元素的和 与 该元组中元素总和的 1/10 接近 问题约束 数组长度 n&#xff1a;10 < n < 100; 数组中没有重复的数字&#xff0c;所以选择的10个元素中也没有重复的数字 遗传算法原理 请移步我上…

国产第一颗7A的车规级马达驱动芯片TMI8140-Q1

新能源汽车因其电动化和智能化的特性&#xff0c;需要大量的马达驱动、DC/DC、高效率Buck & BuckBoost等车规级芯片&#xff0c;成为名副其实的“芯片大户”&#xff01; 以往制造一辆传统汽车一般需要用到500-600颗左右的芯片&#xff0c;而一台高性能的新能源汽车需要芯…

上传IPA包到App Store​

我们都经历过上传IPA包到App Store时的痛苦&#xff01;&#xff01;&#xff01;​ 第一步&#xff1a;通过Xcode-> Archive&#xff0c;Validate App&#xff0c;成功&#xff01;​ 第二步&#xff1a;通过Xcode-> Archive&#xff0c;Distribute App&#xff0c;成…

从股票市场选择配对的股票:共同趋势模型与套利定价理论

股价取对数之后的序列建模为随机游走。现在把取对数之后的股价当作是由一个随机游走和一个平稳时序组成&#xff1a; 是随机游走部分&#xff0c;是平稳部分。取对数后的股价求差就得到回报。所以在时间的回报表示为&#xff1a; 表示非平稳部分的回报&#xff0c;表示平稳部分…

如何基于运维事件中心通过 logstash 进行日志关键字监控

日常运维过程中&#xff0c;很多场景都需要对日志关键字进行监测&#xff0c;以便第一时间发现应用/业务相关异常&#xff0c;这是一种比较常见的监控需求&#xff0c;所以也有很多方法可以实现关键字告警。对于简单的告警可以通过一些传统的监控工具实现&#xff0c;但对于体量…

从头开始搭建一个SpringBoot项目--SpringSecurity的配置

从头开始搭建一个SpringBoot项目--SpringSecurity的配置前言本文的目标使用到的依赖、Redis配置、通用返回实体类依赖Redis项目里的配置通用返回实体ResultResultCodeResultUtil配置文件配置的目录结构Spring Security的配置信息SecurityConfigWebMVCConfig用到的类及代码自定义…

深入浅出自定义创建spring-boot-starter

深入浅出自定义创建spring-boot-starter https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.developing-auto-configuration 快速入手 第一步&#xff1a;新建模块 第二步&#xff1a;修改依赖 <?xml version"1.0" e…

关键词(三)

关键词一.最冤枉的关键字—sizeof二.“简单”的布尔类型—_Bool一.最冤枉的关键字—sizeof 前面我们说过定义变量是需要空间的&#xff08;声明不需要&#xff09;&#xff0c;同时你需要有类型像int,char…这些不同的类型会在内存中开辟不同大小的空间&#xff0c;而sizeof就可…

Web安全测试工具AppScan简述

01 安全测试的对象 了解常见的Web应用安全漏洞&#xff0c;参考OWASP Top 10 2017。 理解这些常见漏洞的攻击原理&#xff0c;如何判断系统是否存在这些漏洞、如何防止这些漏洞。 02 安全测试的实施 SQL注入测试 确认所有的解释器都明确的将不可信数据从命令语句或者查询语…

微服务囧途之BFF层登场

从单体架构演化为微服务架构后&#xff0c;架构者的期望是“模块A”“模块B” “后端服务”。 场景一 Web端和Mobile端都有一个详情页面&#xff0c;需要调用模块A的getDetail接口获取数据。假设Web端实际需要展示的字段是20个&#xff0c;Mobile端实际需要展示的字段是10个…

记一次Metrics-server异常

报错 前几天测试环境k8s集群做etcd的备份恢复。 所有的pod都起来了&#xff0c;包括metrics-server的状态也是 Running,部署新pod也没有异常&#xff0c;结果kubectl top 请求的时候报错了 Error from server (ServiceUnavailable): the server is currently unable to handle …