Contrainer容器¶
Contrainer是一个结合了绘制(painting)、定位(positioning)以及尺寸(sizing)widget的widget。

Container的组成如下:¶
- 最里层的是child元素;
- child元素首先会被padding包着;
- 然后添加额外的constraints限制;
- 最后添加margin。
Container的绘制的过程如下:¶
- 首先会绘制transform效果;
- 接着绘制decoration;
- 然后绘制child;
- 最后绘制foregroundDecoration。
Container自身尺寸的调节分两种情况:¶
- Container在没有子节点(children)的时候,会试图去变得足够大。除非constraints是unbounded限制,在这种情况下,Container会试图去变得足够小。
- 带子节点的Container,会根据子节点尺寸调节自身尺寸,但是Container构造器中如果包含了width、height以及constraints,则会按照构造器中的参数来进行尺寸的调节。
Row,Column组件¶
Row:在水平方向上排列子widget的列表。 Column:在垂直方向上排列子widget的列表。 注意:这两个属于多子节点空间,可以将children排列成一行/一列,但是自身不带滚动属性,如果超出了一行,在debug下面则会显示溢出的提示。

Expanded组件¶
expanded主要是Row/Column的内的小控件,可以用来实现权重的布局。
flex属性:flex参数为弹性系数,如果为0或null,则child是没有弹性的,即不会被扩伸占用的空间。如果大于0,所有的Expanded按照其flex的比例来分割主轴的全部空闲空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | Row(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Expanded(
flex: 1,
child: Container(
height: 40,
color: Colors.amber,
child: Text('amber'),
),
),Expanded(
flex: 2,
child: Container(
height: 40,
color: Colors.red,
child: Text('red'),
),
), Expanded(
flex: 1,
child: Container(
height: 40,
color: Colors.cyan,
child: Text('cyan'),
),
),
],
);
|
结果:
