【Flutter】常用布局容器一

2019-03-20  本文已影响0人  diva_dance

Container

 return Container(
    color: Colors.red,
    child: null,
  ); // 红色块占满全屏
  return Container(
    color: Colors.red,
    child: Text('test block'),
  ); // 红色块包裹文字

以 html box 容器为标准,给容器设置宽高 padding margin


image
 return Container(
  color: Colors.red,
  width: 200,
  height: 200,
  margin: const EdgeInsets.only(left: 30),
  padding: const EdgeInsets.all(30.0),
  alignment: Alignment(1, 0),
  child: Text('text'),
);

padding, margin 不影响设置的宽高


image

然后就是设置 border boxShadow 等

border 通过 decoration 设置, 设置了 decoration 不可以同时设置 color

 return Container(
  width: 200,
  height: 200,
  margin: const EdgeInsets.only(left: 30),
  padding: const EdgeInsets.all(30.0),
  alignment: Alignment(1, 0),
  child: Text('text'),
  decoration: new BoxDecoration(
    color: Colors.red,
    border: Border.all(
      color: Colors.blue,
      width: 2,
      style: BorderStyle.solid
    ),
    borderRadius: BorderRadius.all(Radius.circular(20.0)),
    boxShadow: [BoxShadow(color: Colors.grey, offset: Offset(5, 5))]
  ),
);
image

最后是设置 transform

transform: Matrix4.skew(1, 1)

内置的 Matrix4 提供了多种 transform 方法

image

如果需要设置 最大宽高 通过 constraints 设置

constraints: BoxConstraints(
    maxHeight: 300,
    minHeight: 300
)

属性

Padding

设置 padding

return Padding(
  padding: EdgeInsets.all(30.0),
  child: Container(
    color: Colors.blue,
  ),
);

Center 子控件在中间

return Center(
  widthFactor: 3,
  heightFactor: 2,
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
    child: Text('text'),
  ),
);

设置子组件的宽高之后,Center 的宽高由 widthFactor, heightFactor 决定。
centerWidth = childWidth * widthFactor

image

属性

Align

可以自定义子控件的位置

return Align(
  alignment: Alignment.topCenter,
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
  ),
);
image
return Align(
  alignment: Alignment.center,
  widthFactor: 2,
  heightFactor: 2,
  child: Container(
    width: 100,
    height: 100,
    color: Colors.blue,
  ),
);
image

属性

FittedBox

自适应的布局

return new FittedBox(
  fit: BoxFit.contain,
  alignment: Alignment.center,
  child: new Image.asset(
    'assets/images/title.png',
  ),
);
image image

BoxFit 可以用于图片自适应展示

AspectRatio

固定设备的宽高比

return new AspectRatio(
  aspectRatio: 16 / 9,
  child: Container(
    width: 100,
    height: 100,
    color: Colors.red,
  ),
);

适用于放置比例固定的图片视频。


image

ConstrainedBox

约束子控件

return new ConstrainedBox(
  constraints: BoxConstraints(
    minHeight: 80,
    maxHeight: 100  
  ),
  child: Container(
    width: 100,
    color: Colors.red,
  ),
); // container 的高度为 100 
上一篇下一篇

猜你喜欢

热点阅读