Flutter Container


简介

一个常用的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),
    );
  }
}