Flutter 流式布局组件

Flutter 流式布局组件

简述

类似于Android中的FlexboxLayout布局。

Wrap

spacing: 主轴间距。

runSpacing: 纵轴间距。

direction: 布局方向。

alignment: 主轴对齐方式。
		- Axis.horizonta:水平方向。
		- Axis.vertical:垂直方向。

alignment:主轴堆起方式。

crossAxisAlignment: 纵轴对齐方式。

runAlignment :纵轴方向,每一行的对齐方式

在这里插入图片描述

Wrap(
  //主轴间距
  spacing: 8,
  //纵轴间距
  runSpacing: 4,
  //布局方向
  direction: Axis.horizontal,
  children: List.generate(
    13,
    (index) {
      double w = 50.0 + 10 * index;
      return Container(
        width: w,
        height: 50,
        color: Colors.red,
        alignment: Alignment.center,
        child: Text("$index"),
      );
    },
  ),
)

Flow

Flow相比Wrap更加复杂,一般情况优先使用Wrap,如果需要一些自定义布局或性能要求高时可以使用Flow。

在这里插入图片描述

Flow(
  delegate: MyFlowDelegate(margin: const EdgeInsets.all(10)),
  children: List.generate(
    13,
    (index) {
      double w = 50.0 + 10 * index;
      return Container(
        width: w,
        height: 50,
        color: Colors.red,
        alignment: Alignment.center,
        child: Text("$index"),
      );
    },
  ),
)
class MyFlowDelegate extends FlowDelegate {
  EdgeInsets margin;
  double width = 0;
  double height = 0;

  MyFlowDelegate({this.margin = EdgeInsets.zero});

  @override
  void paintChildren(FlowPaintingContext context) {
    var x = margin.left;
    var y = margin.top;
    for (int i = 0; i < context.childCount; i++) {
      var width = context.getChildSize(i)!.width + x + margin.right;
      if (width < context.size.width) {
        context.paintChild(i, transform: Matrix4.translationValues(x, y, 0));
        x = width + margin.left;
      } else {
        x = margin.left;
        y += context.getChildSize(i)!.height + margin.top + margin.bottom;
        context.paintChild(i, transform: Matrix4.translationValues(x, y, 0));
        x += context.getChildSize(i)!.width + margin.left + margin.right;
      }
    }
  }

  @override
  bool shouldRepaint(covariant FlowDelegate oldDelegate) {
    return this != oldDelegate;
  }

  @override
  Size getSize(BoxConstraints constraints) {
    return const Size(double.infinity, 200);
  }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值