Flutter 多个子控件的容器 Row Column GridView ListView Expanded ExpansionTile

Flutter 系列文章 总体目录

1、Row和Column

Row:水平方向布局
Column:垂直方向布局
2个控件的属性基本一样

属性说明
mainAxisAlignment主轴方向对齐,Row的主轴方向是水平,Column的主轴是垂直方向。具体参考下面的MainAxisAlignment属性说明
crossAxisAlignment次轴对齐方式,对齐的属性和mainAxisAlignment一样
textDirection书写方向,ltr:left to right rtl:right to left
verticalDirectionup:底部对齐 down:顶部对齐

MainAxisAlignment属性说明

属性说明
MainAxisAlignment.start在这里插入图片描述
MainAxisAlignment.center在这里插入图片描述
MainAxisAlignment.end在这里插入图片描述
MainAxisAlignment.spaceBetween在这里插入图片描述
MainAxisAlignment.spaceAround在这里插入图片描述
MainAxisAlignment.spaceEvenly在这里插入图片描述

spaceAround和spaceEvenly区别是:
spaceAround:第一个子控件距开始位置和最后一个子控件距结尾位置是其他子控件间距的一半。
spaceEvenly:所有子控件平分

2、GridView

创建一个3列,水平间隔10,垂直间隔5:

@override
  Widget build(BuildContext context) {
    // TODO: implement build
    var list = <Widget>[];
    for (var i = 0; i < 100; i++) {
      list.add(Container(
        height: 30,
        color: Colors.red,
      ));
    }
    return GridView.count(
      scrollDirection: Axis.vertical,
      crossAxisCount: 3,
      mainAxisSpacing: 5,
      crossAxisSpacing: 10,
      childAspectRatio: 3/4,
      children: list,
    );
  }
主要属性说明
scrollDirection滚动方向,默认垂直
crossAxisCount次轴方向控件个数
mainAxisSpacing主轴方向间隔
crossAxisSpacing次轴方向间隔
childAspectRatio子控件宽高比

注意区分主轴和次轴,沿着控件的方向是主轴,垂直控件的方向是次轴

3、ListView

使用ListView的时候不要使用ListView的直接构造函数,因为直接构造函数没有懒加载,会一次性加载全部子控件,ListView.builde只渲染显示的部分。

ListView.builder(
        itemExtent: 80,
        itemCount: 10000,
        itemBuilder: (context, index) {
          return Container(
            alignment: Alignment.center,
            color: index % 2 == 0 ? Colors.red : Colors.blue,
            child: Text(index.toString()),
          );
        });

ListView的属性和GridView基本一样,下面说几个不一样的

属性说明
itemExtent没一个item的高,如果不设置则依赖子控件
itemCountitem的个数
itemBuilder返回item的子控件

4、Expanded

Expanded组件必须用在 Row、Column、 Flex中,作用是撑开剩余空间。

Column(
      children: <Widget>[
        Container(height: 30,color: Colors.blue,),
        Expanded(child: Container(height: 30,color: Colors.red,),),
        Container(height: 30,color: Colors.yellow,),
      ],
    );

在这里插入图片描述

5、ExpansionTile

分组控件

ExpansionTile(
      leading: CircleAvatar(
        backgroundColor: Colors.red,
        radius: 20,
      ),
      title: Text('group name'),
      children: <Widget>[
        Text('1'),
        Text('1'),
        Text('1'),
        Text('1'),
        Text('1'),
      ],
    );

在这里插入图片描述

属性说明
leading头部,位置如上图的红色圆形,可以显示圆形头像
title标题,如上的 group name
backgroundColor背景颜色
onExpansionChanged打开/关闭事件
trailing右上角三角箭头
initiallyExpanded是展示还是折叠,默认折叠

交流

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。

同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。

Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孟Flutter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值