当前位置: 首页 > news >正文

深入理解 Flutter 鸿蒙版的 Stack 布局:适配屏幕与层叠样式布局

目录

写在前面

什么是 Stack 布局?

Stack 的基本用法

Stack 布局的核心概念

屏幕适配与 Stack 布局

使用 MediaQuery 获取屏幕尺寸

使用 LayoutBuilder 进行自适应布局

高级层叠样式布局示例

1. 照片展示与文字描述

2. 动态调整层叠布局

写在最后


 

写在前面

在 Flutter 中,布局是构建用户界面的基础。今天,我们将重点探讨 Flutter 的 Stack 布局,了解如何使用它创建复杂的界面元素,并实现响应式设计,以适应不同屏幕大小的设备。

什么是 Stack 布局?

Stack 是 Flutter 中的一种布局组件,允许你将多个子组件层叠在一起。通过使用 Stack,你可以在同一个区域内显示多个控件,而每个控件的层叠顺序由添加顺序决定。Stack 布局在实现重叠效果、绝对定位和复杂视图时非常有用。

Stack 的基本用法

Stack(alignment: Alignment.center,children: <Widget>[Container(width: 200,height: 200,color: Colors.blue,),Positioned(top: 50,left: 50,child: Container(width: 100,height: 100,color: Colors.red,),),],
)

在这个示例中,我们创建了一个 Stack,其中包含一个蓝色的容器和一个绝对定位的红色容器。

Stack 布局的核心概念

  1. 子组件层叠

    • 添加到 Stack 中的第一个子组件位于最底层,最后添加的子组件位于最上层。
  2. Positioned 组件

    • Positioned 组件可以在 Stack 中精确控制子组件的位置。通过设置 topbottomleft 和 right 属性,你可以将子组件放置在任何位置。
  3. 对齐属性

    • Stack 还支持 alignment 属性,可以用来定义所有子组件的对齐方式。常用的对齐选项包括 Alignment.centerAlignment.topLeftAlignment.bottomRight 等。

屏幕适配与 Stack 布局

为了使应用适配不同屏幕尺寸,我们可以使用 MediaQuery 和 LayoutBuilder。以下是实现适配的技巧:

使用 MediaQuery 获取屏幕尺寸

final screenSize = MediaQuery.of(context).size;

通过 MediaQuery,你可以获取屏幕的宽度和高度,从而根据屏幕尺寸动态调整 Stack 的子组件大小和位置。

使用 LayoutBuilder 进行自适应布局

LayoutBuilder 可以根据父组件的约束条件动态构建子组件。以下是一个简单的例子:

LayoutBuilder(builder: (context, constraints) {return Stack(children: <Widget>[Container(width: constraints.maxWidth,height: constraints.maxHeight,color: Colors.blue,),Positioned(top: constraints.maxHeight * 0.1,left: constraints.maxWidth * 0.1,child: Container(width: constraints.maxWidth * 0.8,height: constraints.maxHeight * 0.8,color: Colors.red,),),],);},
)

在这个示例中,红色容器的大小和位置根据父组件的约束动态调整。

高级层叠样式布局示例

1. 照片展示与文字描述

这是一个展示图片和文字描述的复杂布局示例:

Stack(children: <Widget>[Image.asset('assets/image.jpg',width: double.infinity,height: 300,fit: BoxFit.cover,),Container(alignment: Alignment.bottomLeft,padding: EdgeInsets.all(16),decoration: BoxDecoration(gradient: LinearGradient(colors: [Colors.black54, Colors.transparent],begin: Alignment.bottomCenter,end: Alignment.topCenter,),),child: Text('美丽的风景',style: TextStyle(color: Colors.white, fontSize: 24),),),],
)

在这个例子中,我们将一张图片和一个带有渐变背景的文字叠加在一起,形成了一个视觉效果丰富的布局。

2. 动态调整层叠布局

class DynamicStack extends StatelessWidget {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text('动态 Stack 示例')),body: LayoutBuilder(builder: (context, constraints) {return Stack(alignment: Alignment.center,children: [Container(width: constraints.maxWidth * 0.8,height: constraints.maxHeight * 0.5,color: Colors.blue,),Positioned(top: constraints.maxHeight * 0.1,child: Container(width: constraints.maxWidth * 0.5,height: 50,color: Colors.red,),),Positioned(bottom: constraints.maxHeight * 0.1,child: Container(width: constraints.maxWidth * 0.3,height: 50,color: Colors.green,),),],);},),);}
}

在这个示例中,我们使用 LayoutBuilder 使得 Stack 内的组件能够根据屏幕大小动态变化,适应不同的设备。

写在最后

Stack 布局是 Flutter 中非常强大的工具,能够实现各种复杂的层叠效果。通过结合 MediaQueryLayoutBuilder,你可以轻松实现响应式布局,确保你的应用在各种屏幕尺寸上都能表现良好。

无论是简单的图层叠加,还是复杂的布局设计,理解 Stack 的使用技巧都能帮助你构建出更加精美和实用的 Flutter 应用。希望本文对你理解 Flutter 的 Stack 布局有所帮助!

 

相关文章:

深入理解 Flutter 鸿蒙版的 Stack 布局:适配屏幕与层叠样式布局

目录 写在前面 什么是 Stack 布局&#xff1f; Stack 的基本用法 Stack 布局的核心概念 屏幕适配与 Stack 布局 使用 MediaQuery 获取屏幕尺寸 使用 LayoutBuilder 进行自适应布局 高级层叠样式布局示例 1. 照片展示与文字描述 2. 动态调整层叠布局 写在最后 写在前…...

JavaScript中Number相关特性

目录 非 VIP 用户可前往公众号“前端基地”进行免费阅读 数值范围 小数注意问题 NaN isNaN()判断是不是NaN JavaScript可以表示的进制 数值扩展 非 VIP 用户可前往公众号“前端基地”进行免费阅读 数值范围 数字类型主要涵盖整数与小数。在数值范围方面,存在特…...

Redis中String类型数据扩容原理分析

大家好&#xff0c;我是 V 哥。在 Java 中&#xff0c;我们有动态数组ArrayList&#xff0c;当插入新元素空间不足时&#xff0c;会进行扩容&#xff0c;好奇 Redis 中的 String 类型&#xff0c;C 语言又是怎样的实现策略&#xff0c;带着疑问&#xff0c;咱们来了解一下。 最…...

智能码二维码zhinengma.cn在供应链管理中有哪些优势?

智能码二维码在供应链管理中具有以下优势&#xff1a; 一、提高信息透明度 通过为每个产品或包装分配唯一的二维码&#xff0c;可以实现供应链各环节信息的实时共享。这有助于提高供应链的信息透明度&#xff0c;让各方都能及时了解产品的状态和位置。 二、加强追溯能力 智…...

代理商培训新策略:利用内部知识库提升培训效果

在当今竞争激烈的市场环境中&#xff0c;代理商作为企业与终端消费者之间的桥梁&#xff0c;其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此&#xff0c;对代理商进行系统而高效的培训&#xff0c;提升其业务技能和服务水平&#xff0c;成为企业不可忽视的重要…...

Redis 哨兵模式下DB库操作审计

Redis Sentinel集群环境 主机版本模式NodeSentinelredis-sentinel-node-06.2.12哨兵MasterYesredis-sentinel-node-16.2.12哨兵SlaveYesredis-sentinel-node-26.2.12哨兵SlaveYes 架构设计 命令行&程序验证 1、在redis-sentinel-node-1上使用redis-cli 连接redis-sentine…...

latex公式输入-矩阵

矩阵输入&#xff1a; 例1 \begin{bmatrix}1& 4&3 &5 \\\frac{1}{4} &1& \frac{1}{2}& 2\\\frac{1}{3}&2&1& \frac{5}{3} \\\frac{1}{5}& \frac{1}{2}& \frac{3}{5}&1 \end{bmatrix} 运行结果&#xff1a; 例2 \begin{bm…...

NSSCTF-WEB-easy_eval

目录 前言 正文 思路 序列化构造 后渗透 思路点1:Redis 思路2:蚁剑插件绕过disable_functinons 结尾 作者的其他文章 前言 说是easy,实际很difficult 正文 思路 <?php class A{public $code "";function __call($method,$args){//最后执行命令eval($th…...

交通目标识别数据集YOLO 模型 ui界面✓图片数量15000,xml和txt标签都有 11类 交通道路车辆行人红黄绿数据集 红绿灯数据集 交通信号数据集

YOLO交通目标识别 数据集 模型 ui界面 ✓图片数量15000&#xff0c;xml和txt标签都有&#xff1b; ✓class&#xff1a;biker&#xff0c;car&#xff0c;pedestrian&#xff0c;trafficLight&#xff0c;trafficLight-Green&#xff0c;trafficLight-GreenLeft&#xff0c; tr…...

买卖股票的最佳时机 题解

买卖股票的最佳时机 问题描述 给定一个数组 prices&#xff0c;其中 prices[i] 表示第 i 天的股票价格。你只能选择某一天买入股票&#xff0c;并选择未来的某一天卖出股票&#xff0c;设计一个算法来计算你所能获取的最大利润。 限制条件&#xff1a; 只能进行一次交易&…...

微信小程序路由跳转的区别及其常见的使用场景

在微信小程序中&#xff0c;页面路由跳转的实现有几种常用方式&#xff0c;不同的跳转方式适用于不同的使用场景。下面是几种跳转方法的区别及其在实际项目中的应用场景。 1. wx.navigateTo 简介&#xff1a;保留当前页面并跳转到指定页面&#xff0c;最多保留10个页面的历史记…...

麒麟桌面版v10 SP1以docker方式安装达梦数据库

安装docker 0.切换root用户&#xff08;可以不切换&#xff0c;但要注意权限问题&#xff0c;我是用root&#xff09; ymym-pc:~/桌面$ whoami ym ymym-pc:~/桌面$ sudo -i rootym-pc:~# whoami root rootym-pc:~# 1.查看系统版本 [rootlocalhost opt]# cat /etc/os-release…...

KNN的 k 设置的过大会有什么问题

在KNN&#xff08;K-Nearest Neighbors&#xff09;算法中&#xff0c;K值的选择对模型的性能和预测结果有着重要影响。如果K值设置得过大&#xff0c;可能会出现以下问题&#xff1a; 欠拟合&#xff1a;当K值过大时&#xff0c;模型会考虑过多的邻近点实例&#xff0c;甚至会…...

Star Tower:智能合约的安全基石与未来引领者

在区块链技术的快速发展中&#xff0c;智能合约作为新兴的应用形式&#xff0c;正逐渐成为区块链领域的重要组成部分。然而&#xff0c;智能合约的可靠性问题一直是用户最为关心的焦点之一。为此&#xff0c;Star Tower以其强大的技术实力和全面的安全保障措施&#xff0c;为智…...

2024-NewStarCTF-WEEK1

web headach3 提示head&#xff0c;抓包查看响应头&#xff0c;得到flag flag值&#xff1a;flag{You_Ar3_R3Ally_A_9ooD_d0ctor} 会赢吗 第一段&#xff1a;源码里找到第一段flag&#xff0c;ZmxhZ3tXQTB3 第二段&#xff1a;分析可知需要在控制台调用revealFlag函数向服务…...

大数据面试题整理——Zookeeper

系列文章目录 大数据面试题专栏点击进入 文章目录 系列文章目录大数据面试题专栏点击进入 1. 什么是 Zookeeper&#xff1f;2. Zookeeper 的特点有哪些&#xff1f;3. Zookeeper 的数据模型是怎样的&#xff1f;4. Zookeeper 的工作流程是怎样的&#xff1f;5. Zookeeper 如何…...

图书库存管理:Spring Boot驱动的进销存系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理图书进销存管理系统的相关信息成为必然。开…...

用增结算数仓化改造:在/离线调度系统的构建与应用

导读 移动运营推广平台&#xff08;OPS&#xff09;承载着百度内部移动应用/移动搜索业务的用户增长预算的全流程结算线上化管控功能&#xff0c;为了解决用增业务发展规模扩大、原有技术架构老旧、无离线数仓系统等一系列的问题&#xff0c;针对全域结算数据启动了整体的架构…...

施磊C++高级进阶课程 | 学习笔记 | 博客汇总

施磊C高级进阶课程 | 学习笔记 | 博客汇总 施磊C | 进阶学习笔记 | 1.对象的应用优化、右值引用的优化-CSDN博客 施磊C | 进阶学习笔记 | 2.智能指针-CSDN博客 施磊C | 进阶学习笔记 | 3.绑定器和函数对象、lambda表达式-CSDN博客 施磊C | 进阶学习笔记 | 4.c11内容汇总、多…...

学习threejs,拉伸几何体THREE.TubeGeometry管道

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️拉伸几何体THREE.TubeGeome…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...