Flutter Developers

Flutter笔记:理解布局方向

2020-02-09  本文已影响0人  A_si

Flutter笔记:理解布局方向

Row、 Column: 这些具有弹性空间的布局类Widget可让您在水平(Row)和垂直(Column)方向上创建灵活的布局。其设计是基于web开发中的Flexbox布局模型。

Row

在水平方向上排列子widget的列表。

Row({
  ...  
  TextDirection textDirection,    
  MainAxisSize mainAxisSize = MainAxisSize.max,    
  MainAxisAlignment mainAxisAlignment = MainAxisAlignment.start,
  VerticalDirection verticalDirection = VerticalDirection.down,  
  CrossAxisAlignment crossAxisAlignment = CrossAxisAlignment.center,
  List<Widget> children = const <Widget>[],
})
 Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text("hello  word", style: TextStyle(fontSize: 30.0,color: Colors.red),),
            Text("I am jack"),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.center,
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Text("hello  word", style: TextStyle(fontSize: 30.0,color: Colors.red),),
            Text("I am jack"),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.end,
          textDirection:TextDirection.rtl,
          children: <Widget>[
            Text("hello  word", style: TextStyle(fontSize: 30.0,color: Colors.red),),
            Text("I am jack"),
          ],
        ),
        Row(
          mainAxisAlignment: MainAxisAlignment.end,
          textDirection:TextDirection.ltr,
          children: <Widget>[
            Text("hello  word", style: TextStyle(fontSize: 30.0,color: Colors.red),),
            Text("I am jack"),
          ],
        ),

        Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          verticalDirection:VerticalDirection.up,
          children: <Widget>[
            Text("hello  word", style: TextStyle(fontSize: 30.0,color: Colors.red),),
            Text("I am jack"),
          ],
        ),
        Row(
          crossAxisAlignment: CrossAxisAlignment.end,
          verticalDirection:VerticalDirection.up,
          children: <Widget>[
            Text("hello  word", style: TextStyle(fontSize: 30.0,color: Colors.red),),
            Text("I am jack"),
          ],
        ),
      ],
    );

第一行没有设置mainAxisSize,默认是MainAxisSize.max,所以居中,第二行设置了MainAxisSize.min,所以居中对齐没有效果。

第三行TextDirection.rtl的时候,MainAxisAlignment.end代表左对齐,第四行相反。

第五行VerticalDirection.up,从下到上的方向,CrossAxisAlignment.start代表下对齐,第六行相反。

Column

Column可以在垂直方向排列其子组件。参数和Row一样,不同的是布局方向为垂直,主轴纵轴正好相反,读者可类比Row来理解,下面看一个例子:

Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      children: <Widget>[
        Text("hi"),
        Text("world"),
      ],
    );

嵌套

如果Row里面嵌套Row,或者Column里面再嵌套Column,那么只有对最外面的RowColumn会占用尽可能大的空间,里面RowColumn所占用的空间为实际大小。

Column(
  mainAxisAlignment: MainAxisAlignment.start,
  children: <Widget>[
    Column(
      mainAxisAlignment: MainAxisAlignment.end,
      children: <Widget>[
        Text("hello world "),
      ],
    )
  ],
);

外层Column竖直方向高度占满屏幕,内层嵌套的竖直方向高度却是wrap_content,即子view的高度。所以及时给嵌套的coloumn设置了MainAxisAlignment.end,也是在上面。

上一篇下一篇

猜你喜欢

热点阅读