Flutter-Flex

Flex 布局我们常用的有Column和Row, Column和Row都是继承Flex,我们以Column为例了解一下Flex的布局原理。

Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          Container(color: Colors.red,width: 80, height: 80,),
          const Text(
            'You have',
          ),
          Text(
            '$_counter',
            style: Theme.of(context).textTheme.headline4,
          ),
          FlutterLogo(size: 100)
        ],
      ) ,
      ), // This trailing comma makes auto-formatting nicer for build methods.
    );
  }

mainAxisAlignment

代码中的mainAxisAlignment 是Column的主轴方向上的排列参数,默认是start,从上到下排列子组件,可以设置成end、center
spaceBetween(将子组件以外的空间平均插入子组件之间)、spaceEvenly(平分子组件以外的空间、spaceAround(将子组件以外的空间平均分给每个子组件两边的空间)等排列方式

spaceAround
image.png
spaceEvenly
image.png
spaceBetween
image.png

crossAxisAlignment

crossAxisAlignment是设置交叉轴上的对齐方式,针对Column交叉轴就是横向位置,针对Row交叉轴就是纵向位置。start、center、end 分别是代表左对齐,居中对齐和居右对齐,这里稍微解释一下为什么变量名是start、end而不是left和right,因为Row 和 Column都是继承Flex,都用到了这个参数,针对Column默认start 就是从上往下排列,针对Row start就是从左往右排列, 另一个原因就是有一些国家的阅读顺序是从右往左阅读,start自然就是代表从右往左开始排列。

CrossAxisAlignment.stretch

着重说一下交叉轴stretch 参数,这个参数会把子组件会被拉伸,越大越好,这样Column或者Row也会被子组件撑大进而尺寸变大。

 Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Container(
        color: Colors.green,
        alignment: Alignment.center,
        child: Column(
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.stretch,
          children: <Widget>[
            ElevatedButton(onPressed: (){}, child: Text('')),
            ElevatedButton(onPressed: (){}, child: Text('')),
            FlutterLogo(size: 100),
            FlutterLogo(size: 100),
            FlutterLogo(size: 100)
          ],
        ),
      ) ,
      ); // This trailing comma makes auto-formatting nicer for build methods.
  }
image.png

通过上面代码的运行结果可以看出子组件button被拉伸到了最大,Column也宽度也变成了最大宽度。

mainAxisSize

mainAxisSize参数影响Column 自身的大小

MainAxisSize.min
      Column 在父级约束下尽可能的小,也就是说所以子组件的高度和
image.png
MainAxisSize.max
     Column 在父级约束下尽可能的大
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容