简介
一个常用的widget,它结合了常见的绘画,定位和大小调整
- 该容器首先让child填充绘制,然后再将其他的约束应用于填充范围。
- 在绘画过程中,容器先应用给定的转换,再绘制装饰以填充的范围,然后绘制child,最后绘制前景,同时填充需要填充的范围
- 没有child的容器将尽可能的大,除非传入的约束是无限制的。child的大小会被width,height等约束覆盖。
基本用法
Container 可以结合多种其他widget,每个widget都有自己的布局行为,因此Container的布局行为有点复杂。
- 简单说,就是如果窗口小部件没有子窗口,没有height,没有width,没有约束,并且父窗口提供无限制约束,则Container会尝试尽可能小。
实例演示
class ContainerDefault extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Center(
child: Container(
margin: const EdgeInsets.all(10.0),
color: const Color(0xfff48fb1),
width: 160.0,
height: 160.0,
),
)
],
);
}
}
class ContainerDefaultA extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
Container(
width: 30.0,
height: 30.0,
child: Container(
width: 60.0,
height: 60.0,
color: const Color(0xfff48fb1),
),
),
],
);
}
}
class ContainerDefaultB extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
constraints: BoxConstraints.expand(
height: Theme.of(context).textTheme.display1.fontSize * 1.1 + 200.0,
),
padding: const EdgeInsets.all(8.0),
color: Colors.teal.shade700,
alignment: Alignment.center,
child: Text('Hello World',
style: Theme.of(context)
.textTheme
.display1
.copyWith(color: Colors.white)),
foregroundDecoration: BoxDecoration(
image: DecorationImage(
image: NetworkImage('https://www.example.com/images/frame.png'),
centerSlice: Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
),
),
transform: Matrix4.rotationZ(0.1),
);
}
}