Flutter Widget - Stack and Positioned 层叠绝对定位

文章介绍了Flutter中使用Stack和Positioned组件来实现类似Web中的绝对定位和AndroidFrame布局的效果。Stack允许子组件堆叠,Positioned则用于根据Stack的坐标设置子组件的位置。示例代码展示了一个包含两个FlutterLogo和一个定位文本的Stack布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

Stack

  • alignment 没有定位或部分定位的子组件的对齐方式
  • textDirection 确定alignment对齐的参考系
  • children 子组件列表
  • fit 确定没有定位的子组件如何去适应Stack的大小。StackFit.loose表示使用子组件的大小,StackFit.expand表示扩伸到Stack的大小。
  • clipBehavior 对超出Stack显示空间的部分如何剪裁
  • hashCode
  • key
  • runtimeType

Positioned

  • child 定位元素
  • width 宽
  • height 高
  • left 距离左边偏移
  • right 距离右边边偏移
  • top 距离顶部偏移
  • bottom 距离底部偏移
  • debugTypicalAncestorWidgetClass
  • hashCode
  • key
  • runtimeType
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Container 容器'),
        ),
        body: Stack(
          alignment: Alignment.centerRight,
          fit: StackFit.loose,
          clipBehavior: Clip.hardEdge,
          children: const <Widget>[
            FlutterLogo(size: 200,),
            FlutterLogo(size: 60, style: FlutterLogoStyle.stacked),
            Positioned(
              width: 100,
              height: 100,
              top: 0,
              left: 0,
              child: Text("定位元素"),
            )
          ],
        )
      )
    );
  }
}

实现效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优小U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值