鸿蒙跨端框架Flutter学习day 2、常用UI组件-层叠布局 Stack & Positioned

前言

在现实世界中,物体总是相互堆叠的:桌子上的水杯,墙壁上的画作。在 Flutter 的 UI 构建中,如果我们想要实现组件之间的"覆盖"效果,Stack(层叠布局) 就是不可或缺的神兵利器。

通过 Stack,我们可以打破 ColumnRow 的线性约束,在 Z 轴(深度)上进行自由堆叠。结合 Positioned 绝对定位,开发者能够构建出如"带头像的封面"、"悬浮操作按钮"等极具视觉冲击力的界面。


目录

  • [一、 Stack 的逻辑:后进者居上](#一、 Stack 的逻辑:后进者居上)
  • [二、 Positioned:空间的绝对支配者](#二、 Positioned:空间的绝对支配者)
  • [三、 溢出处理:裁剪的艺术](#三、 溢出处理:裁剪的艺术)
  • [四、 实战解析:带标签的专辑封面](#四、 实战解析:带标签的专辑封面)
  • [五、 结语](#五、 结语)

一、 Stack 的逻辑:后进者居上

Stack 的工作原理非常简单:它会按照代码的书写顺序,由底层向上依次渲染子组件。
底层组件 1
中层组件 2
顶层组件 3

  • 非定位组件 :会根据 alignment 属性进行对齐。
  • 定位组件 :通过 Positioned 包裹,脱离文档流进行定位。

二、 Positioned:空间的绝对支配者

当子组件被 Positioned 包裹后,它便拥有了 top, bottom, left, right 四个方向的绝对控制权。

属性 作用 说明
top / bottom 垂直定位 距离 Stack 顶/底部的像素值
left / right 水平定位 距离 Stack 左/右侧的像素值
width / height 强制尺寸 优先级高于子组件自身的尺寸设置

三、 溢出处理:裁剪的艺术

如果子组件的尺寸超出了 Stack 的父容器,可以通过 clipBehavior 属性决定是直接裁剪 (Clip.hardEdge) 还是允许溢出显示 (Clip.none)。这在处理动态阴影或悬浮挂架时非常有用。

四、 实战解析:带标签的专辑封面

lib/main.dart 的音乐播放器示例中,我们利用 Stack 在封面图右上角叠加了一个"LIVE"标签:

dart 复制代码
Stack(
  children: [
    Image.network(...), // 底层封面
    Positioned(         // 顶层标签
      top: 40,
      right: 40,
      child: Container(...),
    ),
  ],
)

五、 结语

Stack 是 Flutter 布局中突破二维限制的关键。它赋予了 UI "深度",让我们可以像搭建乐高积木一样,在屏幕上构建出层次分明、动静结合的视觉空间。


欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

相关推荐
richard_yuu14 分钟前
JSON vs XML vs 二进制:3种序列化终极选型
xml·c++·qt·学习·json
迪丽热爱24 分钟前
多媒体应用5-817
学习
世人万千丶25 分钟前
收纳格卡片风:ArkUI 让鸿蒙物品清单像收纳盒贴标
学习·华为·harmonyos·鸿蒙
yuhulkjv33528 分钟前
Grok鸿蒙版导出word格式的终极解法:AI导出鸭如何重构AI内容到文档的最后一公里
人工智能·ai·word·harmonyos·ai导出鸭
恋猫de小郭33 分钟前
Dart 3.13 大更新,感觉比 Flutter 更带劲
android·前端·flutter
MartinYeung534 分钟前
[论文学习]X-Boundary:为LLM建立精确安全边界以抵御多轮越狱攻击
学习·安全
xiaoxiangsiyan40 分钟前
RHCE之2026年全套考点详解
运维·前端·网络·chrome·学习·rhce
阿部多瑞 ABU1 小时前
告别手工核图:基于 .NET + MuPDFCore 的 CAD 等轴测 PDF 材料表提取与新旧版本对比实战
后端·算法·ui·pdf·c#
大锅盖11 小时前
HarmonyOS 6.1.1 ArkWeb:交付门户下载资料前-为什么必须先登记下载代理与来源字段
android·华为·harmonyos
特立独行的猫a1 小时前
Tauri v2的Rust应用 → HarmonyOS(鸿蒙 PC)移植30分钟速成指南
开发语言·rust·harmonyos·tauri·移植·鸿蒙pc