打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Flutter

线性布局指的是沿水平或者垂直方向排布子组件。flutter中通过row和column来实现线性布局。row和column都继承于flex。

  1. Row({
  2. ...
  3. TextDirection textDirection,
  4. MainAxisSize mainAxisSize = MainAxisSize.max,
  5. MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start,
  6. VerticalDirection verticalDirection = VerticalDirection.down,
  7. CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center,
  8. List<Widget> children = const <Widget>[],
  9. })

RowColumn都只会在主轴方向占用尽可能大的空间,而纵轴的长度则取决于他们最大子元素的长度,另外row和column都只有一行/一列,如果超出了范围就会报overflow错误。

超出屏幕会自动折行的布局称为流式布局,flutter中可以使用wrap和flow来处理流式布局。

一个例子:一个column里只有两个text,设置了column的一些选项,建议可以调整一下各个选项的值,就知道它们各自都是干什么了 

class CenterColumnRoute extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Column(  //以列的形式排列      textDirection: TextDirection.ltr,//文本方向是右(right)往左(left)的      crossAxisAlignment: CrossAxisAlignment.start, //纵轴(由于是column,主轴是竖直方向,纵轴就是水平方向),即水平方向的对齐方式,start:以起始处对齐      //这里由于textDirection设置为了rtl,从右到左,所以start在右面,故以右方对齐      verticalDirection: VerticalDirection.down,  //textDirection的垂直方向,即竖直方向。比如.up就是从下往上排列,最下面是第一个组件,往上是第二个,以此类推。      mainAxisAlignment: MainAxisAlignment.end,  //column的主轴是竖直方向,而由于verticalDirection设置为了up,方向是下到上的,所以end指的就是上,start则是下。如果      //vertivalDirection设置为了down,则竖直方向是从上到下,那么start指的就是上,end指的是下      children: <Widget>[        Text("hi"),        Text("world"),      ],    );  }}

运行截图:

class FlexLayoutTestRoute extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Column(      children: <Widget>[        //Flex的两个子widget按1:2来占据水平空间        Flex(          direction: Axis.horizontal,          children: <Widget>[            Expanded(              flex: 1,    //1红              child: Container(                height: 30.0,                color: Colors.red,              ),            ),            Expanded(              flex: 2,    //2绿              child: Container(                height: 30.0,                color: Colors.green,              ),            ),          ],        ),        Padding(          padding: const EdgeInsets.only(top: 100.0),          child: SizedBox(            height: 100.0,            //Flex的三个子widget,在垂直方向按2:1:1来占用100像素的空间            child: Flex(              direction: Axis.vertical,              children: <Widget>[                Expanded(                  flex: 2,      //2红                  child: Container(                    height: 30.0,                    color: Colors.red,                  ),                ),                Spacer(                  flex: 1,      //1黑                ),                Expanded(                  flex: 1,      //1绿                  child: Container(                    height: 30.0,                    color: Colors.green,                  ),                ),              ],            ),          ),        ),      ],    );  }}

edgeInsets:

进击的小🐴农

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《Flutter个人资料界面应用》
Flutter 布局(七)- Row、Column详解
Flutter学习笔记(11)--文本组件、图标及按钮组件
半小时带你入门 Flutter
Flutter之测试Http和HttpClient
Flutter学习笔记(23)--多个子元素的布局Widget(Rwo、Column、Stack、IndexedStack、Table、Wrap)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服