水平布局和垂直布局确实很好用,但是有一种情况是无法完成的,比如放入一个图片,图片上再写一些字或者放入容器,这时候Row和Column就力不从心了。Flutter为这种情况准备了Stack层叠布局,效果和代码如下:
层叠布局的 alignment 属性
alignment属性是控制层叠的位置的,建议在两个内容进行层叠时使用。它有两个值X轴距离和Y轴距离,值是从0到1的,都是从上层容器的左上角开始算起的CircleAvatar组件的使用 CircleAvatar这个经常用来作头像的,组件里边有个radius的值可以设置图片的弧度
import 'package:flutter/material.dart';
void main () => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context ){
var stack = new Stack(
alignment: const FractionalOffset(0.5,0.89),
children: <Widget>[
new CircleAvatar(
backgroundImage: new NetworkImage('http://b-ssl.duitang.com/uploads/item/201805/13/20180513224039_tgfwu.png'),
radius: 100.0,
),
new Container(
decoration: new BoxDecoration(
color: Colors.pinkAccent,
),
padding: EdgeInsets.fromLTRB(20.0, 5.0, 20.0,5.0),
child: new Text('小熊'),
)
],
);
return MaterialApp(
title:'ListView Widget',
home: Scaffold(
appBar: new AppBar(
title: new Text('Stack层叠布局'),
),
body: Center(child: stack),
),
);
}
}
Stack的Positioned属性
Positioned组件的属性
- bottom: 距离层叠组件下边的距离
- left:距离层叠组件左边的距离
- top:距离层叠组件上边的距离
- right:距离层叠组件右边的距离
- width: 层叠定位组件的宽度
- height: 层叠定位组件的高度
具体代码如下:
import 'package:flutter/material.dart';
void main () => runApp(MyApp());
class MyApp extends StatelessWidget{
@override
Widget build(BuildContext context ){
var stack = new Stack(
alignment: const FractionalOffset(0.5,0.89),
children: <Widget>[
new CircleAvatar(
backgroundImage: new NetworkImage('http://b-ssl.duitang.com/uploads/item/201805/13/20180513224039_tgfwu.png'),
radius: 100.0,
),
new Positioned(
top: 10.0,
left: 10.0,
child: new Text('小熊'),
),
new Positioned(
bottom: 10.0,
right: 10.0,
height: 50.0,
width: 50.0,
child: new Text('小熊'),
)
],
);
return MaterialApp(
title:'ListView Widget',
home: Scaffold(
appBar: new AppBar(
title: new Text('Stack层叠布局'),
),
body: Center(child: stack),
),
);
}
}