9 . 布局容器
9.1 Container,Padding,Center
Container内部提供了间距,背景样式,圆角边框等基础属性,可以控制子Widget的摆放方式(居中,左,右) Padding 设置间距,将Widget放里面 Center 设置居中,将Widget放里面getContainer() { return Container( child: Center( child: Text('Container(容器)在UI框架中是一个很常见的概念,Flutter也不例外。'), ), //内边距 padding: EdgeInsets.all(18.0), //外边距 margin: EdgeInsets.all(44.0), width: 180.0, height: 240, //子Widget居中对齐 /* alignment: Alignment.center,*/ //Container样式 decoration: BoxDecoration( //背景色 color: Colors.red, //圆角边框 borderRadius: BorderRadius.circular(10.0), ), ); } getPadding() { //只需要设置边距 可以使用Padding return Padding( padding: EdgeInsets.all(44.0), child: Text('我是Padding'), ); } getCenter() { //直接居中 return Center( child: Text('center text'), ); }
9.2 Row,Column,Expanded
Row是水平布局 Column是垂直布局 Expanded表示将剩余的空间,如何分配 Row 与 Column 自身的大小由父widget的大小、子widget的大小、以及mainSize设置共同决定(mainAxisSize和crossAxisSize) 主轴(纵轴)值为max:主轴(纵轴)大小等于屏幕主轴(纵轴)方向大小或者父widget主轴(纵轴)方向大小 主轴(纵轴)值为min:所有子widget组合在一起的主轴(纵轴)大小//Row的用法示范 Row( children: <Widget>[ Container(color: Colors.yellow, width: 60, height: 80,), Container(color: Colors.red, width: 100, height: 180,), Container(color: Colors.black, width: 60, height: 80,), Container(color: Colors.green, width: 60, height: 80,), ], ); //Column的用法示范 Column( children: <Widget>[ Container(color: Colors.yellow, width: 60, height: 80,), Container(color: Colors.red, width: 100, height: 180,), Container(color: Colors.black, width: 60, height: 80,), Container(color: Colors.green, width: 60, height: 80,), ], ); //第一个和最后一个平分 Row( children: <Widget>[ Expanded(flex: 1, child: Container(color: Colors.yellow, height: 60)), //设置了flex=1,因此宽度由Expanded来分配 Container(color: Colors.red, width: 100, height: 180,), Container(color: Colors.black, width: 60, height: 80,), Expanded(flex: 1, child: Container(color: Colors.green,height: 60),)/设置了flex=1,因此宽度由Expanded来分配 ], );
「对齐方式」
根据主轴与纵轴,设置子Widget在这两个方向上的对齐规则mainAxisAlignment与crossAxisAlignment.比如主轴方向start表示靠左对齐,center表示横向居中对齐,end表示靠右对齐,spaceEvenly表示按固定间距对齐;而纵轴方向start则表示靠上对齐,center表示纵向居中对齐,end表示靠下对齐.「控制大小」
如果想让容器与子Widget在主轴上完全匹配,需要通过设置Row的mainAxisSize参数为MainAxisSize.min,由所有子Widget来决定主轴方向的容器长度,即主轴方向的长度尽可能小.类似wrap_content. mainAxisSize: MainAxisSize.min, //让容器宽度与所有子Widget的宽度一致9.3 Stack,Positioned
Stack,类似FrameLayout. Stack提供了层叠布局的容器,而Positioned则提供了设置子Widget位置的能力.Stack( children: <Widget>[ Container(color: Colors.yellow, width: 300, height: 300),//黄色容器 Positioned( left: 18.0, top: 18.0, child: Container(color: Colors.green, width: 50, height: 50),//叠加在黄色容器之上的绿色控件 ), Positioned( left: 18.0, top:70.0, child: Text("Stack提供了层叠布局的容器"),//叠加在黄色容器之上的文本 ) ], )Positioned只能在Stack中使用.
查看更多关于Flutter 入门笔记(Part 3) 布局的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did129221