Flutter 之 Stack 、IndexedStack 和 Positioned 控件

Stack 系列为层叠的控件,类似 Android 的 FrameLayout 的作用。

Stack

new Center(
          child: new Stack(
            alignment: Alignment.center,
            textDirection: TextDirection.ltr,
            fit: StackFit.loose,
            overflow: Overflow.clip,
            children: <Widget>[
              SizedBox(
                width: 100,
                height: 100,
                child: Card(
                  color:Colors.red,
                ),
              ),
              SizedBox(
                width: 90,
                height: 90,
                child: Card(
                  color: Colors.yellow,
                ),
              ),
              SizedBox(
                width: 80,
                height: 80,
                child: Card(
                  color: Colors.blue,
                ),
              ),
              SizedBox(
                width: 70,
                height: 70,
                child: Card(
                  color: Colors.black,
                ),
              ),
              SizedBox(
                width: 60,
                height: 60,
                child: Card(
                  color: Colors.orange,
                ),
              )
            ],
          ),
        )

属性

  1. alignment

Alignment,对齐方式

  1. textDirection

TextDirection,文字方向

  1. fit:

StackFit.loose 尽量取最小宽度和高度
StackFit.expand 尽量占满 Stack 的宽度和高度
StackFit.passthrough 使用 Stack 父布局的宽度和高度的约束

  1. overflow

Overflow.clip 超出 Stack 的宽度或者高度进行裁剪
Overflow.visible 超出 Stack 的宽度或者高度显示

image.png

IndexedStack

Stack 的子类,多了一个 index 属性。主要作用是指定哪层显示,其他层级不显示。fit 属性改为 sizing。

new IndexedStack(
            alignment: Alignment.center,
            textDirection: TextDirection.ltr,
            sizing: StackFit.loose,
            index:1,
            children: <Widget>[
....
],
          ),

Positioned

Positioned ,通常结合 Stack 一起使用,相对 Stack 固定位置的布局,


Stack(
            alignment: Alignment.center,
            textDirection: TextDirection.ltr,
            fit: StackFit.loose,
            overflow: Overflow.clip,
            children: <Widget>[
              Positioned(
                left:20,
                top:20,
                right:20,
                bottom:20,
                //left right,width不可以同时设置
                width: 100,
                //top bottom,height不可以同时设置
                height: 100,
                child: Text('Positioned'),
              )
            ],
          )
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容