Flutter 基础控件 布局

水平布局

/// 水平布局排列 灵活布局和不灵活布局 混用
class RowDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Row(
      children: <Widget>[
        // 不灵活布局
        RaisedButton(
          onPressed: () {
            print("点击了红色按钮");
          },
          color: Colors.red,
          child: Text("红色按钮"),
        ), FlexibleRaiseButton(
          onPressed: () {
            print("点击了黄色按钮");
          },
          color: Colors.yellow,
          child: Text("黄色按钮"),
        ), RaisedButton(
          onPressed: () {
            print("点击了蓝色按钮");
          },
          color: Colors.blue,
          child: Text("蓝色按钮"),
        )
      ],
    );
  }
}

/// 灵活布局
class FlexibleRaiseButton extends StatelessWidget {
  final VoidCallback onPressed;
  final Widget child;
  final Color color;

  FlexibleRaiseButton(
      {@required this.onPressed, @required this.child, @required this.color});

  @override
  Widget build(BuildContext context) {
    return Expanded(child: RaisedButton(
      onPressed: onPressed, child: child, color: this.color,));
  }
}

效果

在这里插入图片描述

常用属性

MainAxisAlignment

主轴方向上的对齐方式,会对child的位置起作用,默认是start
其中MainAxisAlignment枚举值:

  • center:将children放置在主轴的中心;
  • end:将children放置在主轴的末尾;
  • spaceAround:将主轴方向上的空白区域均分,使得children之间的空白区域相等,但是首尾child的空白区域为1/2;
  • spaceBetween:将主轴方向上的空白区域均分,使得children之间的空白区域相等,首尾child都靠近首尾,没有间隙;
  • spaceEvenly:将主轴方向上的空白区域均分,使得children之间的空白区域相等,包括首尾child;
  • start:将children放置在主轴的起点;
MainAxisSize

在主轴方向占有空间的值,默认是max
MainAxisSize的取值有两种:

  • max:根据传入的布局约束条件,最大化主轴方向的可用空间;
  • min:与max相反,是最小化主轴方向的可用空间;
CrossAxisAlignment

children在交叉轴方向的对齐方式,与MainAxisAlignment略有不同。
CrossAxisAlignment枚举值有如下几种:

baseline:在交叉轴方向,使得children的baseline对齐;
center:children在交叉轴上居中展示;
end:children在交叉轴上末尾展示;
start:children在交叉轴上起点处展示;
stretch:让children填满交叉轴方向;

VerticalDirection

定义了children摆放顺序,默认是down。
VerticalDirection枚举值有两种:

  • down:从top到bottom进行布局;
  • up:从bottom到top进行布局。

垂直布局

/// 垂直布局排列
class ColumnDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Column(
      // 交叉轴偏右
      crossAxisAlignment: CrossAxisAlignment.end,
      // 主轴居中
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text("我是第一行"),
        Text("我是第二行,但是我比别人长"),
        Text("我是第三行")
      ],
    );
  }
}

效果

在这里插入图片描述

居中布局

/// 居中布局
class CenterDemo extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Center(
      child: ColumnDemo(),
    );
  }
}

效果

在这里插入图片描述

层叠布局

/// 层叠布局
class StackDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Stack(
      children: <Widget>[
        // 创建一个圆形头像
        CircleAvatar(
          backgroundImage: NetworkImage(
              "https://avatar.csdn.net/2/B/C/3_shuzhuchengfu.jpg"),
          radius: 100.0,
        ),
        // 创建一段描述
        Positioned(
            top: 10,
            left: 10,
            child: Text('我是第一段描述', style: TextStyle(color: Colors.red),)
        ),
        Positioned(
            right: 50,
            bottom: 20,
            child: Text('我是第二段描述', style: TextStyle(color: Colors.green),)
        ),
      ],
    );
  }
}

效果

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值