flutter 五:布局

1.创建可配置的图标徽章(IconBadge)小部件

import 'package:flutter/material.dart';
class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Column(//垂直排列的小部件
        children: <Widget>[
          IconBadge(Icons.pool,size:64.0),
          IconBadge(Icons.pool,size:64.0),
          IconBadge(Icons.pool,size:64.0)
        ],
    );
  }
}
class IconBadge extends StatelessWidget{
  final IconData icon;
  final double size;
  IconBadge (this.icon,{this.size=32});
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      margin: EdgeInsets.all(10),
      child:Icon(icon,size:size,color:Colors.white),
      width: size+60,
      height: size+60,
      color: Color.fromRGBO(3, 54, 255, 1.0),
    );
  }
}

在这里插入图片描述

2. Row(横排) 与 Column(竖排)

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      child:Row(
        children:<Widget>[
          IconBadge(Icons.pool),
          IconBadge(Icons.beach_access),
          IconBadge(Icons.airplanemode_active),
        ]
      )
    );
  }
}

在这里插入图片描述

3.mainAxis:主轴,crossAxis:交叉轴

Container里有几个和主轴相关的属性。

       mainAxisAlignment: MainAxisAlignment.spaceBetween,//center居中,end靠结束的位置,start靠开始的位置,
                                                         //spaceAround剩下的空间分配到小部件的周围,
                                                         //spaceBetween剩下的空间分配到小部件的中间
                                                         crossAxisAlignment: CrossAxisAlignment.stretch,//start在交叉轴的起点对齐,stretch拉伸

在这里插入图片描述

4.SizedBox:固定尺寸的盒子

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      child:Column(
        mainAxisAlignment: MainAxisAlignment.center,//center居中,end靠结束的位置,start靠开始的位置,
                                                         //spaceAround剩下的空间分配到小部件的周围,
                                                         //spaceBetween剩下的空间分配到小部件的中间
        //crossAxisAlignment: CrossAxisAlignment.stretch,//start在交叉轴的起点对齐,stretch拉伸
        children:<Widget>[
          SizedBox(//固定尺寸的盒子
            width:200.0,
            height: 300.0,
            child:  Container(
              decoration:BoxDecoration(
                color:Color.fromRGBO(3, 54, 255, 1.0),
                borderRadius: BorderRadius.circular(8.0),
              ),
              child: Icon(Icons.ac_unit,color:Colors.white,size:32.0),
            ),
          ),
          SizedBox(
            height:32.0,
          ) ,//间距效果
          SizedBox(//固定尺寸的盒子
            width:100.0,
            height: 100.0,
            child:  Container(
              decoration:BoxDecoration(
                color:Color.fromRGBO(3, 54, 255, 1.0),
                borderRadius: BorderRadius.circular(8.0),
              ),
              child: Icon(Icons.brightness_2,color:Colors.white,size:32.0),
            ),
          ),
          //IconBadge(Icons.pool),
          //IconBadge(Icons.beach_access),
          //IconBadge(Icons.airplanemode_active),
        ]
      )
    );
  }
}

在这里插入图片描述

5.Alignment:对齐

alignment: Alignment.bottomRight,//0.0,0.0子部件居中,-1.0,0,0,子部件居左,topCenter上居中,bottomRight右下角

在这里插入图片描述

6.Stack:一摞小部件

stack里可以放一摞小部件,可以用position来放小部件

class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      child:Column(
        mainAxisAlignment: MainAxisAlignment.center,//center居中,end靠结束的位置,start靠开始的位置,
                                                         //spaceAround剩下的空间分配到小部件的周围,
                                                         //spaceBetween剩下的空间分配到小部件的中间
        //crossAxisAlignment: CrossAxisAlignment.stretch,//start在交叉轴的起点对齐,stretch拉伸
        children:<Widget>[
          Stack(
            children:<Widget>[

          SizedBox(//固定尺寸的盒子
            width:200.0,
            height: 300.0,
            child:  Container(
              alignment: Alignment.bottomRight,//0.0,0.0子部件居中,-1.0,0,0,子部件居左,topCenter上居中,bottomRight右下角
              decoration:BoxDecoration(
                color:Color.fromRGBO(3, 54, 255, 1.0),
                borderRadius: BorderRadius.circular(8.0),
              ),
              child: Icon(Icons.ac_unit,color:Colors.white,size:32.0),
            ),
          ),
          SizedBox(
            height:32.0,
          ) ,//间距效果
          SizedBox(//固定尺寸的盒子
            width:100.0,
            height: 100.0,
            child:  Container(
              decoration:BoxDecoration(
                color:Color.fromRGBO(3, 54, 255, 1.0),
                borderRadius: BorderRadius.circular(8.0),
              ),
              child: Icon(Icons.brightness_2,color:Colors.white,size:32.0),
            ),
          ),
          Positioned(
            right: 20,
            top: 20,
            child: Icon(Icons.ac_unit,color:Colors.white,size:32.0),
          ),
          //IconBadge(Icons.pool),
          //IconBadge(Icons.beach_access),
          //IconBadge(Icons.airplanemode_active),
            ]
          ),
        ]
      )
    );
  }
}

在这里插入图片描述

7.AspectRatio:宽高比

宽高比是16比9的小部件

AspectRatio(
            aspectRatio: 16.0/9.0,
            child:Container(
              color:Color.fromRGBO(2, 54, 255, 1.0),
            )
          )

在这里插入图片描述

8.ConstrainedBox:带限制的盒子

ConstrainedBox(
            constraints: BoxConstraints(
              minHeight:200.0,
              maxWidth:200.0,
            ),
            child: Container(
              color:Color.fromRGBO(3, 54, 255, 1.0),
            ),
          )

在这里插入图片描述

demo

import 'package:flutter/material.dart';
class LayoutDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      child:Column(
        mainAxisAlignment: MainAxisAlignment.center,//center居中,end靠结束的位置,start靠开始的位置,
                                                         //spaceAround剩下的空间分配到小部件的周围,
                                                         //spaceBetween剩下的空间分配到小部件的中间
        //crossAxisAlignment: CrossAxisAlignment.stretch,//start在交叉轴的起点对齐,stretch拉伸
        children:<Widget>[
          ConstrainedBox(
            constraints: BoxConstraints(
              minHeight:200.0,
              maxWidth:200.0,
            ),
            child: Container(
              color:Color.fromRGBO(3, 54, 255, 1.0),
            ),
          )
          //StackDemo(),
        ]
      )
    );
  }
}
class StackDemo extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Stack(
            children:<Widget>[

          SizedBox(//固定尺寸的盒子
            width:200.0,
            height: 300.0,
            child:  Container(
              alignment: Alignment.bottomRight,//0.0,0.0子部件居中,-1.0,0,0,子部件居左,topCenter上居中,bottomRight右下角
              decoration:BoxDecoration(
                color:Color.fromRGBO(3, 54, 255, 1.0),
                borderRadius: BorderRadius.circular(8.0),
              ),
              child: Icon(Icons.ac_unit,color:Colors.white,size:32.0),
            ),
          ),
          SizedBox(
            height:32.0,
          ) ,//间距效果
          SizedBox(//固定尺寸的盒子
            width:100.0,
            height: 100.0,
            child:  Container(
              decoration:BoxDecoration(
                color:Color.fromRGBO(3, 54, 255, 1.0),
                borderRadius: BorderRadius.circular(8.0),
              ),
              child: Icon(Icons.brightness_2,color:Colors.white,size:32.0),
            ),
          ),
          Positioned(
            right: 20,
            top: 20,
            child: Icon(Icons.ac_unit,color:Colors.red,size:32.0),
          ),
          //IconBadge(Icons.pool),
          //IconBadge(Icons.beach_access),
          //IconBadge(Icons.airplanemode_active),
            ]
          );
  }
}
class IconBadge extends StatelessWidget{
  final IconData icon;
  final double size;
  IconBadge (this.icon,{this.size=32});
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Container(
      margin: EdgeInsets.all(10),
      child:Icon(icon,size:size,color:Colors.white),
      width: size+60,
      height: size+60,
      color: Color.fromRGBO(3, 54, 255, 1.0),
    );
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值