Flutter &&鸿蒙next中的 Stack 和 Positioned 用法详解

简介: 在 Flutter 中,Stack 和 Positioned 是创建层叠布局和灵活定位元素的常用组件。Stack 可以将多个子组件叠加在一起,允许子组件相互重叠;Positioned 用于在 Stack 内部精确控制子组件的位置。本文详细介绍了它们的基本用法、属性和应用场景,包括动画、弹出层和悬浮按钮等。

在 Flutter 中,Stack 和 Positioned 是非常常用的组件,用于创建层叠布局和灵活的定位元素。它们特别适合于需要重叠的布局场景,如 UI 中的弹出框、动画效果、动态内容展示等。本文将详细介绍 Stack 和 Positioned 的基本用法、应用场景以及一些细节。

  1. Stack 组件
    Stack 是一个可以将多个子组件叠加在一起的容器。它的核心作用就是在一个二维空间中,允许子组件相互重叠、彼此覆盖。你可以像在 Photoshop 等图形设计软件中那样,通过不同的层级将多个元素叠加起来。

Stack 的基本用法
Stack 的子组件按顺序从下到上呈现,最先添加的子组件位于底部,而后添加的子组件会覆盖在其上。它并不限制子组件的尺寸和位置,你可以自由控制它们的布局。

Stack(
children: [
Container(
width: 200,
height: 200,
color: Colors.blue,
),
Container(
width: 100,
height: 100,
color: Colors.red,
),
],
)
在上面的例子中,Stack 会将两个 Container 叠加在一起,蓝色的容器在底部,红色的容器在其上面,覆盖了蓝色容器的一部分。

Stack 组件的属性
alignment: 用于设置子组件的对齐方式。默认情况下,子组件的布局位置是相对于父 Stack 的左上角。如果需要不同的对齐方式,可以使用 alignment 属性进行调整。

Stack(
alignment: Alignment.bottomRight,
children: [
Container(width: 200, height: 200, color: Colors.blue),
Container(width: 100, height: 100, color: Colors.red),
],
)
在上面的例子中,红色的容器会被定位在蓝色容器的右下角。

fit: 用于设置子组件在 Stack 中的缩放方式,默认是 StackFit.loose,即子组件的大小不受限制。可以使用 StackFit.expand 来让子组件填充整个 Stack。

Stack(
fit: StackFit.expand,
children: [
Container(width: 200, height: 200, color: Colors.blue),
Container(width: 100, height: 100, color: Colors.red),
],
)
在这种情况下,红色的容器会被扩展以填满整个 Stack。

  1. Positioned 组件
    Positioned 用于在 Stack 内部精确控制子组件的位置。Positioned 通过相对于 Stack 的位置来确定子组件的位置。每个 Positioned 都有 top, right, bottom, 和 left 属性,用来控制子组件的距离。

Positioned 的基本用法
Stack(
children: [
Container(width: 200, height: 200, color: Colors.blue),
Positioned(
top: 20,
left: 20,
child: Container(width: 100, height: 100, color: Colors.red),
),
],
)
在上面的代码中,红色的容器被放置在蓝色容器的 (20, 20) 坐标位置,即距离 Stack 的顶部 20 像素,左侧 20 像素。

Positioned 的位置属性
top: 控制子组件距离父 Stack 顶部的距离。
bottom: 控制子组件距离父 Stack 底部的距离。
left: 控制子组件距离父 Stack 左侧的距离。
right: 控制子组件距离父 Stack 右侧的距离。
如果设置了 top 和 bottom,或者 left 和 right,则这些属性会自动相互影响,使组件在该方向上的尺寸自动适配。

示例:多个 Positioned 组件
Stack(
children: [
Container(width: 200, height: 200, color: Colors.blue),
Positioned(
top: 20,
left: 20,
child: Container(width: 50, height: 50, color: Colors.red),
),
Positioned(
bottom: 20,
right: 20,
child: Container(width: 50, height: 50, color: Colors.green),
),
],
)
在这个例子中,蓝色的容器作为基础,红色的容器位于左上角,绿色的容器位于右下角,所有组件都通过 Positioned 精确定位。

  1. Stack 和 Positioned 组合应用
    示例:重叠的按钮和背景
    一个实际的场景是设计一个按钮层叠在图片上,通常可以使用 Stack 和 Positioned 来实现:

Stack(
children: [
Image.network('https://example.com/image.jpg', width: 300, height: 200, fit: BoxFit.cover),
Positioned(
bottom: 30,
right: 30,
child: ElevatedButton(
onPressed: () {},
child: Text('点击我'),
),
),
],
)
在这个例子中,我们将一张图片作为背景,并将一个按钮放置在图片的右下角。

  1. 使用 Stack 和 Positioned 做动画
    Stack 和 Positioned 也非常适合做动画。例如,可以通过 AnimatedPositioned 组件来实现元素的动态移动:

AnimatedPositioned(
duration: Duration(seconds: 1),
top: _topPosition,
left: _leftPosition,
child: Container(width: 50, height: 50, color: Colors.red),
)
每当 _topPosition 或 _leftPosition 的值发生变化时,AnimatedPositioned 会自动进行平滑过渡,移动元素到新的位置。

总结
Stack 和 Positioned 是 Flutter 中处理复杂布局的重要工具。Stack 可以将多个子组件堆叠在一起,而 Positioned 则能让我们精确地控制这些子组件的位置。结合使用这两个组件,我们可以实现灵活、富有创意的 UI 布局。通过调整属性和布局组合,Stack 和 Positioned 适用于多种不同的场景,包括动画、弹出层、悬浮按钮等。掌握它们的用法,将帮助你提升 Flutter 开发的效率与灵活性。
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lbcyllqj/article/details/143580752

目录
相关文章
|
12天前
【HarmonyOS Next开发】:ListItemGroup使用
通过使用ListItemGroup和AlphabetIndexer两种类型组件,实现带标题分类和右侧导航栏的页面
104 61
|
7天前
|
安全 数据安全/隐私保护 Android开发
HarmonyOS 5.0 Next实战应用开发—‘我的家乡’【HarmonyOS Next华为公司完全自研的操作系统】
HarmonyOS NEXT是华为自研的鸿蒙操作系统的重要版本更新,标志着鸿蒙系统首次完全脱离Linux内核及安卓开放源代码项目(AOSP),仅支持鸿蒙内核和鸿蒙系统的应用。该版本引入了“和谐美学”设计理念,通过先进的物理渲染引擎还原真实世界的光影色彩,为用户带来沉浸式体验。应用图标设计融合国画理念,采用留白和实时模糊技术展现中式美学。 HarmonyOS NEXT强化了设备间的协同能力,支持无缝切换任务,如在手机、平板或电脑间继续阅读文章或编辑文件。系统注重数据安全和隐私保护,提供数据加密和隐私权限管理功能。此外,它利用分布式技术实现跨设备资源共
73 15
HarmonyOS 5.0 Next实战应用开发—‘我的家乡’【HarmonyOS Next华为公司完全自研的操作系统】
|
7天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
30 8
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
10天前
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
75 4
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
10天前
|
安全 API 数据安全/隐私保护
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
66 18
|
8天前
|
人工智能 自然语言处理 API
自学记录HarmonyOS Next的HMS AI API 13:语音合成与语音识别
在完成图像处理项目后,我计划研究HarmonyOS Next API 13中的AI语音技术,包括HMS AI Text-to-Speech和Speech Recognizer。这些API提供了强大的语音合成与识别功能,支持多语言、自定义语速和音调。通过这些API,我将开发一个支持语音输入与输出的“语音助手”原型应用,实现从语音指令解析到语音响应的完整流程。此项目不仅提高了应用的交互性,也为开发者提供了广阔的创新空间。未来,语音技术将在无障碍应用和智慧城市等领域展现巨大潜力。如果你也对语音技术感兴趣,不妨一起探索这个充满无限可能的领域。 (238字符)
67 11
|
9天前
|
存储 API 计算机视觉
自学记录HarmonyOS Next Image API 13:图像处理与传输的开发实践
在完成数字版权管理(DRM)项目后,我决定挑战HarmonyOS Next的图像处理功能,学习Image API和SendableImage API。这两个API支持图像加载、编辑、存储及跨设备发送共享。我计划开发一个简单的图像编辑与发送工具,实现图像裁剪、缩放及跨设备共享功能。通过研究,我深刻体会到HarmonyOS的强大设计,未来这些功能可应用于照片编辑、媒体共享等场景。如果你对图像处理感兴趣,不妨一起探索更多高级特性,共同进步。
67 11
|
11天前
|
传感器 测试技术 定位技术
HarmonyOS Next 模拟器安装与探索
HarmonyOS 5 的发布带来了许多新特性,尤其是 HarmonyOS Next 模拟器。本文将带你一步步了解如何安装和使用这个强大的工具,帮助你更好地进行开发,加速项目进展。通过 DevEco Studio 的 Device Manager,你可以轻松创建、配置并启动模拟器,模拟真实设备的效果,支持多窗口、跨设备测试等新特性。此外,模拟器还提供了虚拟传感器、GPS 模拟、音频输入等功能,极大地方便了开发和调试过程。掌握这些功能,能让你的开发更加高效便捷。
88 9
|
12天前
|
开发者
【HarmonyOS Next开发】用户文件访问
文件所有者为登录到该终端设备的用户,包括用户私有的图片、视频、音频、文档等。 应用对用户文件的创建、访问、删除等行为,需要提前获取用户授权,或由用户操作完成。
34 10
|
12天前
|
存储 JSON 测试技术
【HarmonyOS Next开发】云开发-云数据库(二)
实现了云侧和端侧的云数据库创建、更新、修改等操作。这篇文章实现调用云函数对云数据库进行增删改查。
33 9

热门文章

最新文章