Flutter Row、Column布局

网友投稿 917 2022-10-09

Flutter Row、Column布局

Flutter Row、Column布局

Row的布局有六个步骤,这种布局表现来自Flex(Row和Column的父类):

首先按照不受限制的主轴(main axis)约束条件,对flex为null或者为0的child进行布局,然后按照交叉轴( cross axis)的约束,对child进行调整;按照不为空的flex值,将主轴方向上剩余的空间分成相应的几等分;对上述步骤flex值不为空的child,在交叉轴方向进行调整,在主轴方向使用最大约束条件,让其占满步骤2所分得的空间;Flex交叉轴的范围取自子节点的最大交叉轴;主轴Flex的值是由mainAxisSize属性决定的,其中MainAxisSize可以取max、min以及具体的value值;每一个child的位置是由mainAxisAlignment以及crossAxisAlignment所决定。

的Flex布局,包括主轴、交叉轴等概念:

构造函数如下:

Row({ Key key, MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start, MainAxisSize mainAxisSize = MainAxisSize.max, CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center, TextDirection textDirection, VerticalDirection verticalDirection = VerticalDirection.down, TextBaseline textBaseline, List children = const [],})

MainAxisAlignment:主轴方向上的对齐方式,会对child的位置起作用,默认是start。

center:将children放置在主轴的中心;end:将children放置在主轴的末尾;spaceAround:将主轴方向上的空白区域均分,使得children之间的空白区域相等,但是首尾child的空白区域为1/2;spaceBetween:将主轴方向上的空白区域均分,使得children之间的空白区域相等,首尾child都靠近首尾,没有间隙;spaceEvenly:将主轴方向上的空白区域均分,使得children之间的空白区域相等,包括首尾child;start:将children放置在主轴的起点;

其中spaceAround、spaceBetween以及spaceEvenly的区别,就是对待首尾child的方式。其距离首尾的距离分别是空白区域的1/2、0、1。

MainAxisSize:在主轴方向占有空间的值,默认是max。

max:根据传入的布局约束条件,最大化主轴方向的可用空间;min:与max相反,是最小化主轴方向的可用空间;

CrossAxisAlignment:children在交叉轴方向的对齐方式,与MainAxisAlignment略有不同。

baseline:在交叉轴方向,使得children的baseline对齐;center:children在交叉轴上居中展示;end:children在交叉轴上末尾展示;start:children在交叉轴上起点处展示;stretch:让children填满交叉轴方向;

TextDirection:阿拉伯语系的兼容设置,一般无需处理。

VerticalDirection:定义了children摆放顺序,默认是down。

down:从top到bottom进行布局;up:从bottom到top进行布局。

top对应Row以及Column的话,就是左边和顶部,bottom的话,则是右边和底部。

TextBaseline:使用的TextBaseline的方式

示例

Row( children: [ Expanded( child: Container( color: Colors.red, padding: EdgeInsets.all(5.0), ), flex: 1, ), Expanded( child: Container( color: Colors.yellow, padding: EdgeInsets.all(5.0), ), flex: 2, ), Expanded( child: Container( color: Colors.blue, padding: EdgeInsets.all(5.0), ), flex: 1, ), ],)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:grommet - 用于企业应用程序的最高级UX框架(grommet rubber)
下一篇:ABCWeb – 一个Go的Web应用程序框架和生成器
相关文章

 发表评论

暂时没有评论,来抢沙发吧~