文章目录
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),
);
}
}