Flutter开发之——多组件布局容器-权重组件(Flexible、Expanded、Spacer)

一 概述

  • Flexible、Expanded、Spacer是多组件布局容器Row、Column、Flex的权重属性组件
  • Flexible组件可以控制Row、Column、Flex的子控件占满父控件
  • Expanded用于将剩余空间填充满
  • Spacer用于撑开Row、Column、Flex的子控件的空隙

二 Flexible

2.1 构造方法

  const Flexible({
    Key? key,
    this.flex = 1,
    this.fit = FlexFit.loose,
    required Widget child,
  }) : super(key: key, child: child);

2.2 属性说明

属性说明取值
flex子控件充满剩余空间的比例int
fit填满剩余空间的方式FlexFit类型

2.3 示例

代码
Row(
     children: <Widget>[
          Flexible(
              flex: 1,
              fit: FlexFit.loose,
              child: Container(color: Colors.red, height: 50, alignment: Alignment.center, 
                  child: Text('Flexible1', style: TextStyle(color: Colors.white),),)),
            Flexible(
               flex: 2,
               fit: FlexFit.tight,
               child: Container(alignment: Alignment.center, color: Colors.orange, height: 50,
                  child: Text('Flexible2', style: TextStyle(color: Colors.white),),)),
            Flexible(
               flex: 3,
               fit: FlexFit.tight,
               child: Container(alignment: Alignment.center, color: Colors.blue, height: 50, 
                  child: Text('Flexible3', style: TextStyle(color: Colors.white),),))
          ],
        )
效果图

三 Expanded

3.1 构造方法

class Expanded extends Flexible {
  /// Creates a widget that expands a child of a [Row], [Column], or [Flex]
  /// so that the child fills the available space along the flex widget's
  /// main axis.
  const Expanded({
    Key? key,
    int flex = 1,
    required Widget child,
  }) : super(key: key, flex: flex, fit: FlexFit.tight, child: child);
}

3.2 说明

  • Expanded继承Flexible,且fit属性为FlexFit.tigh(强制)填满剩余空间。

3.3 示例

代码
Row(
    children: <Widget>[
        Container(alignment: Alignment.center,color:Colors.red, height: 50, child: Text('Expanded1'),),
        Expanded(
            flex: 2,
            child: Container(alignment: Alignment.center, color: Colors.orange, height: 50, child: Text('Expanded2'),)),
        Container(alignment: Alignment.center,color:Colors.blue, height: 50, child: Text('Expanded3'),),
          ],
        )
效果图

四 Spacer

4.1 build方法

@override
  Widget build(BuildContext context) {
    return Expanded(
      flex: flex,
      child: const SizedBox.shrink(),
    );
  }

4.2 说明

Spacer的通过Expanded的实现的,和Expanded的区别是:Expanded可以设置子控件,而Spacer的子控件尺寸是0,因此Spacer适用于撑开Row、Column、Flex的子控件的空隙

4.3 示例

代码
Row(
    children: <Widget>[
         Container(alignment: Alignment.center,color:Colors.red, height: 50, child: Text('Container1'),),
         Spacer(flex: 2,),
         Container(alignment: Alignment.center, color: Colors.orange, height: 50, child: Text('Container2'),),
         Spacer(),
         Container(alignment: Alignment.center,color:Colors.blue, height: 50, child: Text('Container3'),),
          ],
  )
效果图

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值