flutter响应式布局组件wrap

2020-08-12  本文已影响0人  一叠纸船

这个组件常用在响应式布局上,使用灵活多变。可设置属性较多

final Axis direction;
final WrapAlignment alignment;
final double spacing;
final WrapAlignment runAlignment;
final double runSpacing;
final WrapCrossAlignment crossAxisAlignment;
final TextDirection textDirection;
final VerticalDirection verticalDirection;
基础用法的是:
Container(
  child: Wrap(
    children: <Widget>[
      Container(
        width: 100,
        height: 100,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 50,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 100,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      )
    ],
  ),
)

效果是:


11_base.jpg
direction属性默认是Axis.horizontal, 可以设置的只有Axis.horizontal和Axis.vertical这两个值,如下就是更改默认值之后的效果:
Container(
  child: Wrap(
    direction: Axis.vertical, // 设置direction为Axis.vertical
    children: <Widget>[
      Container(
        width: 100,
        height: 200,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 40,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 400,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      )
    ],
  ),
)

效果是:


11_direction.jpg
alignment属性的值是WrapAlignment类型的,分别是start, end, center, spaceBetween, spaceAround和spaceEvenly 六个值。这里就展示设置spaceBetween的值情况,代码如下:
Container(
  child: Wrap(
    alignment: WrapAlignment.spaceBetween, //设置alignment的值
    children: <Widget>[
      Container(
        width: 100,
        height: 100,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 50,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 100,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.orange
      )
    ],
  ),
)

效果图:


11_alignment.jpg
runAlignment这个属性是和alignment相对的,值的类型是一样的,设置的就是direction属性的垂直方向各子元素的排列原则,代码如下:
Container(
  width: 375,
  height: 300,
  color: Colors.black12,
  child: Wrap(
    runAlignment: WrapAlignment.spaceBetween,
    children: <Widget>[
      Container(
        width: 100,
        height: 100,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 50,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 100,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      ),
        Container(
        width: 100,
        height: 50,
        color: Colors.orange
      )
    ],
  ),
)

效果图:


11_runAlignment.jpg
spacing属性的值是double类型,这个比较简单,就是子元素排列方向上各元素之间的间隙最小值

示例代码如下:

Container(
  child: Wrap(
    spacing: 20,
    children: <Widget>[
      Container(
        width: 100,
        height: 100,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 50,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 100,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.orange
      )
    ],
  ),
)

效果图:


11_space.jpg
runSpacing这个值其实是和spacing是相对的,它设置的是子元素排列方向的垂直方向各子元素的间隙最小值。即如果子元素是按照垂直排列的,这个属性的值就是水平方向各子元素的间隙最小值。代码和效果图就不赘述了。
crossAxisAlignment这个属性也是很好理解的,即子元素在排列方向的垂直方向的位置展示,对比一下代码和效果图就一下能明白了。
Container(
  child: Wrap(
    crossAxisAlignment: WrapCrossAlignment.center,
    children: <Widget>[
      Container(
        width: 100,
        height: 100,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 50,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 100,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      ),
        Container(
        width: 100,
        height: 50,
        color: Colors.orange
      )
    ],
  ),
)

效果图如下:


11_crossAxisAlignment.jpg
verticalDirection这个属性的值是VerticalDirection类型,只有两个值,up 和down。默认是down, 就是垂直向下排列。如果是设置成up,就是垂直方向,从下往上排列。代码如下:
Container(
  child: Wrap(
    verticalDirection: VerticalDirection.up,
    children: <Widget>[
      Container(
        width: 100,
        height: 100,
        color: Colors.red,
      ),
      Container(
        width: 100,
        height: 50,
        color: Colors.blue,
      ),
      Container(
        width: 100,
        height: 100,
        color: Colors.green,
      ),
        Container(
        width: 100,
        height: 100,
        color: Colors.yellow
      ),
        Container(
        width: 100,
        height: 50,
        color: Colors.orange
      )
    ],
  ),
)

效果图如下:


11_verticalDirection.jpg
TextDirection 这个就是设置文字方向的,这里就不赘述了。

这个系列的文章是根据flutter 的 Widget of the week来做的,欢迎大家斧正。

上一篇下一篇

猜你喜欢

热点阅读