Flutter 之 Container 控件

Container

给子控件包裹一层 Container 属性,如大小,间距,对齐方式,背景颜色等等。

Container 和 SizedBox 区别

SizedBox 主要是控制子控件的宽和高,而 Container 显得更强大些,属性更多,比如还可以控制子控件的对齐方式,margin 和 padding,添加边框等等。另外两个继承的 Widget 对应不太一样,SizedBox 是 RenederObjectWidget 。而 Container 是 StatelessfulElement 。对应的 Element 和 RenderObject 也是不一样。具体看下面 UML 图


Container.png

Container 属性

  1. alignment 子控件对齐方式
AlignmentDirectional.topStart
AlignmentDirectional.topCenter
AlignmentDirectional.topEnd
AlignmentDirectional.centerStart
AlignmentDirectional.center
AlignmentDirectional.centerEnd
AlignmentDirectional.bottomStart
AlignmentDirectional.bottomCenter
AlignmentDirectional.bottomEnd
  1. decoration
    不能和 color 属性同时设置。decoration 也是设置背景,不过比 color 属性更强大,可以设置圆角,背景图片,边线,
decoration: new BoxDecoration(
                  color: Colors.red,//背景颜色,image 为空才显示
                  image: new DecorationImage(//背景图片
                      image:NetworkImage('https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1')),
                 // borderRadius: BorderRadius.all(Radius.circular(10)),
                  border: new Border.all(//边线颜色和宽度
                    color: Colors.blue,
                    width: 2.0,
                  ),
                boxShadow:<BoxShadow>[//阴影渐变颜色,深度
                  new BoxShadow (
                    color: const Color(0xcc000000),
                    offset: new Offset(0.0, 2.0),
                    blurRadius: 4.0,
                  ),
                  new BoxShadow (
                    color: const Color(0x80000000),
                    offset: new Offset(0.0, 6.0),
                    blurRadius: 20.0,
                  ),
                ],
                gradient:new LinearGradient(//背景渐变颜色,image 属性为 null 才有用
                  begin: const Alignment(0.0, -1.0),
                  end: const Alignment(0.0, 0.6),
                  colors: <Color>[
                    const Color(0xffef5350),
                    const Color(0x00ef5350)
                  ],
                ),
                shape:BoxShape.circle,//控件形状,不能和 borderRadius 一起使用
              )

  1. foregroundDecoration

和 Decoration 属性一样使用,背景显示在子控件上面。如图

foregroundDecoration.png
  1. constraints

约束 Container 控件的最大和最小宽度和高度

constraints: BoxConstraints(
                minWidth: 300,
                minHeight: 300,
              ),
  1. transform

控件旋转,缩放变化等。

旋转:

transform: new Matrix4.identity()
                ..rotateZ(15 * 3.1415927 / 180),

缩放:

new Matrix4.identity()
        ..scale(1.5)

还有 child ,width ,height ,属性这个就不用多说了。

new Container(
              alignment:AlignmentDirectional.topStart,
              width: 100,
              height: 100,
              //color: Colors.red,
              child: Text('Container 内容'),
              decoration: new BoxDecoration(
                  color: Colors.red,
                 // image: new DecorationImage(
                 //     image:NetworkImage('https://cn.bing.com/th?id=OIP.xq1C2fmnSw5DEoRMC86vJwD6D6&pid=Api&rs=1')),
                 // borderRadius: BorderRadius.all(Radius.circular(10)),
                  border: new Border.all(
                    color: Colors.blue,
                    width: 2.0,
                  ),
                boxShadow:<BoxShadow>[
                  new BoxShadow (
                    color: const Color(0xcc000000),
                    offset: new Offset(0.0, 2.0),
                    blurRadius: 4.0,
                  ),
                  new BoxShadow (
                    color: const Color(0x80000000),
                    offset: new Offset(0.0, 6.0),
                    blurRadius: 20.0,
                  ),
                ],
                gradient:new LinearGradient(
                  begin: const Alignment(0.0, -1.0),
                  end: const Alignment(0.0, 0.6),
                  colors: <Color>[
                    const Color(0xffef5350),
                    const Color(0x00ef5350)
                  ],
                ),
                shape:BoxShape.circle,
              ),
              constraints: BoxConstraints(
                minWidth: 300,
                minHeight: 300,
              ),
              transform: new Matrix4.identity()
                ..rotateZ(15 * 3.1415927 / 180),
            )
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容