Flutter 层叠布局组件

2023-11-18

Flutter 层叠布局组件

简述

Stack组件可以将子元素叠加显示,类似于Android中的FrameLayout布局。

Stack

alignment:在没有使用Positioned属性时,子组件在Stack中的对齐方式。

fit:设置未定位的子组件如何适用Stack中的填充方式。
    - loose:默认值,由子组件自己决定。
    - expand:尽可能大会拉伸。

overflow:子元素超出Stack边界处理方式。
		- clip:默认值,剪裁。
		- visible:显示。

基本使用

在这里插入图片描述

Stack(
  children: [
    Container(width: 200, height: 200, color: Colors.red),
    Container(width: 150, height: 150, color: Colors.green),
    Container(width: 100, height: 100, color: Colors.blue),
  ],
)

fit属性

在这里插入图片描述

SizedBox(
  height: 200,
  child: Stack(
    fit: StackFit.expand,
    children: [
      Container(width: 200, height: 200, color: Colors.red),
      Container(width: 150, height: 150, color: Colors.green),
      Container(width: 100, height: 100, color: Colors.blue),
    ],
  ),
)

alignment属性

在这里插入图片描述

Stack(
  alignment: Alignment.center,
  children: [
    Container(width: 200, height: 200, color: Colors.red),
    Container(width: 150, height: 150, color: Colors.green),
    Container(width: 100, height: 100, color: Colors.blue),
  ],
)

Stack & Positioned

Positioned可以指定精确定位。

在这里插入图片描述

Stack(
  alignment: Alignment.center,
  children: [
    Container(width: 50, height: 50, color: Colors.red),
    Positioned(
      width: 50,
      height: 50,
      left: 0,
      top: 0,
      child: Container(width: 150, height: 150, color: Colors.green),
    ),
    Positioned(
      width: 50,
      height: 50,
      right: 0,
      top: 0,
      child: Container(color: Colors.blue),
    ),
    Positioned(
      width: 50,
      height: 50,
      right: 0,
      bottom: 0,
      child: Container(color: Colors.yellow),
    ),
    Positioned(
      width: 50,
      height: 50,
      left: 0,
      bottom: 0,
      child: Container(color: Colors.pink),
    ),
  ],
)

在这里插入图片描述

Stack(
    //设置未定位组件的对齐方式
    alignment: Alignment.center,
    //未定位的如何适应Stack空间
    fit: StackFit.loose,
    children: [
        Container(
            color: Colors.red,
            child: Text(
                "hello world",
                style: TextStyle(color: Colors.white),
            ),
        ),
        Positioned(
            child: Text("hello flutter"),
            left: 50,
        ),
        Positioned(
            child: Text("hello stack"),
            top: 50,
        ),
        Align(
            alignment: Alignment.bottomCenter,
            child: TextButton(
                child: Text("跳转IndexedStack"),
                onPressed: () {
                    Navigator.push(
                        context,
                        MaterialPageRoute(builder: (BuildContext context) {
                            return IndexedStackPage();
                        }),
                    );
                },
            ),
        ),
        Positioned(
            bottom: 100,
            child: TextButton(
                child: Text("跳转IndexedStack"),
                onPressed: () {
                    Navigator.push(
                        context,
                        MaterialPageRoute(builder: (BuildContext context) {
                            return IndexedStackPage();
                        }),
                    );
                },
            ),
        ),
    ],
)

IndexedStack

IndexedStack是Stack的子类,通过index属性显示指定索引的子组件。

在这里插入图片描述

Container(
  width: double.infinity,
  height: 300,
  color: Colors.grey,
  child: Column(
    mainAxisAlignment: MainAxisAlignment.center,
    crossAxisAlignment: CrossAxisAlignment.center,
    children: [
      buildIndexedStack(),
      buildBtn(),
    ],
  ),
)
buildIndexedStack() {
  return IndexedStack(
    index: _index,
    children: [
      Container(
        width: 200,
        height: 200,
        color: Colors.red,
        child: const Icon(Icons.home, size: 60),
      ),
      Container(
        width: 200,
        height: 200,
        color: Colors.green,
        child: const Icon(Icons.message, size: 60),
      ),
      Container(
        width: 200,
        height: 200,
        color: Colors.blue,
        child: const Icon(Icons.settings, size: 60),
      ),
    ],
  );
}
buildBtn() {
  return Row(
    mainAxisAlignment: MainAxisAlignment.center,
    children: [
      OutlinedButton(
        onPressed: () {
          setState(() {
            _index = 0;
          });
        },
        child: const Text("显示第1个"),
      ),
      OutlinedButton(
        onPressed: () {
          setState(() {
            _index = 1;
          });
        },
        child: const Text("显示第2个"),
      ),
      OutlinedButton(
        onPressed: () {
          setState(() {
            _index = 2;
          });
        },
        child: const Text("显示第3个"),
      ),
    ],
  );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 层叠布局组件 的相关文章

随机推荐

  • pg_stat_statement如何安装部署使用

    pg stat statements模块提供一种跟踪执行统计服务器执行的所有SQL语句的手段 该模块默认是不开启的 如果需要开启需要我们手动对其进进行编译安装 修改配置文件并重启数据库 并在使用前手动载入该模块 1 手动对pg stat s
  • 离线强化学习(Offline RL)系列3: (算法篇)策略约束-BCQ算法详解与实现

    更新日志 论文信息 Off Policy Deep Reinforcement Learning without Exploration Github 本文主要介绍的是连续空间状态下的策略约束的BCQ算法 作者首先就offline RL中容
  • 软件质量属性

    质量特性 质量子特性 功能性 适宜性 准确性 互用性 依从性 安全性 可靠性 成熟型 容错性 可恢复性 可用性 可理解性 易学性 可操作性 效率 时间特性 资源特性 可维护性 可分析性 可修改性 稳定性 可测试性 可移植性 适应性 易安装性
  • Backtrader量化&回测10——取消预加载,读取自定义的可迭代数据

    文章目录 各模块解释 1 获取K线数据 2 可迭代数据类 3 策略模块 示例代码 从这一部分开始 我们将不会再聚焦于基本的操作细节上 而是更多的做一些有特点的修改 or 魔改 这篇博客记录了 不进行预加载数据 而是实时加载数据的操作 各模块
  • 靠着“反转”设计,这些短视频火了

    不知从何时开始 在那些爆火的短视频中 出现了这样一类作品 开头看似平平无奇 一切正常 突然惊现神转折 给了观众一个措手不及 而这种措手不及也大大提升了观众对此类视频的强烈兴趣 在短短15s到60s的体量内 反转 设计凭借出人意料的戏剧化特性
  • 华为云鲲鹏云服务器系列的规格,鲲鹏云服务器系列规格

    鲲鹏云服务器系列规格 内容精选 换一换 华为云帮助中心 为用户提供产品简介 价格说明 购买指南 用户指南 API参考 最佳实践 常见问题 视频帮助等技术文档 帮助您快速上手使用华为云服务 介绍在执行扩容操作有一定的限制 用户需要在扩容前充分
  • C# Newtonsoft.Json object 转 json 为空

    问题 使用 Newtonsoft Json 框架 object 转 json 发现用 internal 修饰的属性 不能被转json JsonConvert SerializeObject obj 例如 internal sealed cl
  • 07Vue3-Vuex中计算数学getters应用

    getters Home vue
  • java动漫_求java做动画代码

    展开全部 import java awt Canvas import java awt Color import java awt Dimension import java awt EventQueue import java awt F
  • VMware无法连接网络

    运行VMware之后 使用 ip addr 指令查看ip地址的时候发现没有ip地址 打开任务管理器 gt 服务 找到 VMnetDHCP 和 VMware NAT Service 右击运行 配置完之后重启网络
  • 中国C-V2X通讯标准应用层标准介绍

    前言 2017年9月18日 中国智能网联汽车产业创新联盟携手重庆长安汽车 通用汽车 清华大学等单位发布了我国第一部V2X应用层团体标准 合作式智能运输系统 车用通信系统应用层及应用数据交互标准 T CSAE 53 2017 该标准的发布填补
  • Unity C# OnTriggerEnter()理解

    网上看了不少文档 但是实在是看不太明白 所以就索性花了一个晚上 终于算是弄明白了OnTriggerEnter 函数 自认为我理解的没错 如果有错误的地方 还烦请指正 举例说明 ColliderTest cs代码 void OnTrigger
  • JQuery扩展 — div大小改变触发事件

    以下为js代码 function window undefined var elems jq resize resize extend resize timeout id str setTimeout setTimeout str resi
  • mySql查看和修改字符编码

    http blog sina com cn s blog 70e79b050101dhnx html MySQL的默认编码是Latin1 不支持中文 要支持中午需要把数据库的默认编码修改为gbk或者utf8 1 需要以root用户身份登陆才
  • Inno Setup 如何让生成的setup.exe文件有管理员权限

    首先 在 Setup 段 PrivilegesRequired admin 然后 找到INNO安装目录下的SetupLdr e32文件 将程序中的Manifest更改一下 用reshacker这类工具改 这样运行程序的时候 Windows
  • AI实战营第二期 笔记5——MMPretrain代码课

    文章目录 摘要 MMPreTrain实战 安装 推理 OR 使用API 数据集 训练与测试 微调 摘要 MMPretrain 是一个全新升级的预训练开源算法框架 旨在提供各种强大的预训练主干网络 并支持了不同的预训练策略 MMPretrai
  • angular2 router中的路由跳转navigate

    navigate是Router类的一个方法 主要用来跳转路由 函数定义 navigate commands any extras NavigationExtras Promise
  • 人工智能(crawler)—— 爬虫综合

    目录 内容简介 第一章 爬虫简介 1 1 什么是网络爬虫 1 1 1 爬虫的简单定义 1 1 2 爬虫的分类 1 2 为什么需要爬虫 1 2 1 爬虫的用途 1 2 2怎么做爬虫 第二章 爬虫的基本常识 2 1 爬虫的合法性问题 2 2 爬
  • QT按钮显示和隐藏

    创建GroupBox 将按钮放置进去 ui groupBox gt setGeometry 100 100 150 50 int x ui groupBox gt geometry x int y ui groupBox gt geomet
  • Flutter 层叠布局组件

    文章目录 Flutter 层叠布局组件 简述 Stack 基本使用 fit属性 alignment属性 Stack Positioned IndexedStack Flutter 层叠布局组件 简述 Stack组件可以将子元素叠加显示 类似