5 Flutter UI 页面布局 Stack 

本文介绍了Flutter中Stack组件的使用,包括如何利用Stack、Align和Positioned实现元素的灵活定位布局。示例代码展示了在不同位置放置蓝色边框图标,如左上角、正中心和右下角,以此创建复杂的界面设计。

一 Stack 层叠组件

蓝色边框相对于红色的边框,放置于任何的位置,就可以实现定位布局

body: Center(
          child: Stack(
        alignment: Alignment.center,
        children: [
          Container(width: 300, height: 400, color: Colors.red),
          Text(
            "This is Test",
            style: TextStyle(color: Colors.white, fontSize: 50),
          )
        ],
      ))

二 Stack + Align 实现多个元素的定位布局

child: Stack(children: [
            Align(
                // 0-0 是正中心点 ,负值往上移动,正值往下移动
                alignment: Alignment(0, 0),
                child: IconContainer(
                  Icons.home,
                  size: 52,
                  color: Colors.blue,
                )),
            Align(
                alignment: Alignment(-1, -1),
                child: IconContainer(Icons.settings,
                    size: 40, color: Colors.green)),
            Align(
                alignment: Alignment(1, 1),
                child: IconContainer(Icons.password,
                    size: 60, color: Colors.cyan)),
          ]),

三 Stack + Positioned 定位

Container(
          width: 300,
          height: 400,
          color: Colors.red,
          // 多个元素实现定位布局 Stack + Align
          child: Stack(children: [
            Positioned(
                // 定位到左上方的位置
                top: 0,
                left: 0,
                child: IconContainer(
                  Icons.home,
                  size: 52,
                  color: Colors.blue,
                )),
            Positioned(
                left: 100,
                top: 120,
                child: IconContainer(Icons.settings,
                    size: 40, color: Colors.green)),
            Positioned(
                // 定位到右下方的位置
                right: 0,
                bottom: 0,
                child:
                    IconContainer(Icons.password, size: 60, color: Colors.cyan))
          ]),
        )

Flutter是Google推出的跨平台UI框架,其提供的布局系统强大而灵活,能让开发者高效构建美观且响应式的用户界面。以下是对Flutter核心布局组件的详细解析: ### Row和Column `Row`和`Column`是线性布局组件,`Row`用于水平排列子组件,`Column`用于垂直排列子组件。它们都继承自`Flex`,可以通过`mainAxisAlignment`和`crossAxisAlignment`属性分别控制主轴和交叉轴的对齐方式。例如,要实现一个水平排列且子元素居中对齐的布局可以这样写: ```dart Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text('Item 1'), Text('Item 2'), ], ); ``` ### Stack `Stack`用于将子组件堆叠在一起,默认情况下子组件会堆叠在左上角。可以通过`Positioned`组件来定位子组件的位置。以下是一个简单示例: ```dart Stack( children: [ Image.asset('images/background.jpg'), Positioned( top: 20, left: 20, child: Text('Title'), ), ], ); ``` ### Flex `Flex`是`Row`和`Column`的基类,它可以通过`direction`属性指定布局方向。`Flex`组件可以结合`Flexible`和`Expanded`来分配子组件的空间。 ```dart Flex( direction: Axis.horizontal, children: [ Expanded( flex: 1, child: Text('First item'), ), Expanded( flex: 2, child: Text('Second item'), ), ], ); ``` ### Container `Container`是一个多功能的组件,它可以包含子组件,并且可以设置自身的宽度、高度、边距、内边距、背景颜色等属性。 ```dart Container( width: 200, height: 100, padding: EdgeInsets.all(10), margin: EdgeInsets.all(5), color: Colors.blue, child: Text('Hello, Flutter!'), ); ``` ### Padding `Padding`组件用于给子组件添加内边距。 ```dart Padding( padding: EdgeInsets.all(10), child: Text('Text with padding'), ); ``` 在Flutter里,通过组合`Row`、`Column`和`Stack`,能够完成绝大部分的布局,所以没有相对布局之类的东西,更多的Flutter控件可以参考flutter.io/widgets/ [^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值