我已经使用了Expanded
和Flexible
小部件,它们似乎都工作相同。
扩展和灵活之间有什么区别?
Expanded
只是一个简写Flexible
使用Expanded
这种方式:
Expanded(
child: Foo(),
);
严格等价于:
Flexible(
fit: FlexFit.tight,
child: Foo(),
);
当你想要一个不同的,在某些响应式布局中有用的时候,你可能想要使用Flexible
over 。Expanded
fit
和之间的区别在于FlexFit.tight
,FlexFit.loose
这loose
将允许其子级具有最大尺寸,同时tight
强制该子级填充所有可用空间。
下的小部件Flexible
默认为 WRAP_CONTENT尽管您可以使用参数更改它fit
。
MATCH_PARENT下Expanded
的小部件可以使用.flex
Expanded
- 它Flexible
与套装合身
class Expanded extends Flexible {
const Expanded({
Key key,
int flex = 1,
@required Widget child,
}) : super(
key: key,
flex: flex,
fit: FlexFit.tight,
child: child
);
}
Expanded() 只不过是 Flexible() 与
Flexible (fit: FlexFit.tight) = Expanded()
但是,默认情况下灵活使用fit :FlexFit.loose
。
FlexFit.tight = 想尽可能多地贴合父母。
FlexFit.loose = 想要松散地适应父母,为自己占用尽可能少的空间。
如果您使用,Flexible
而不是 ,的唯一区别Expanded
是Flexible
让其子项具有与自身相同或更小的宽度Flexible
,而Expanded
强制其子项具有与 . 完全相同的宽度Expanded
。但是在调整自己的大小时,两者都Expanded
忽略Flexible
了孩子的宽度。
灵活的
小Flexible
部件包装了一个小部件,因此小部件变得可调整大小。当 Flexible 小部件包装一个小部件时,该小部件将成为 Flexible 小部件的子级并被认为是灵活的。在布局不灵活的小部件后,小部件会根据它们的flex
和fit
属性调整大小。
展开
小Expanded
部件可以包装小部件并强制小部件填充额外空间。
这是示例
用于Flexible
调整 aRow
或中的小部件的大小Column
。这样,您可以调整子小部件的间距,同时保持其相对于其父小部件的大小。Expanded
更改子小部件的约束,因此它填充任何空白空间。
Row(children:[
Flexible(
child: Container(color: Colors.red, child: Text('This is a very long text that won’t fit the line.'))),
Expanded(
child: Container(color: Colors.green, child: Text(‘Goodbye!’))),
]
)
注意:这意味着不可能按照Row
孩子的大小成比例地展开孩子。Row 要么使用确切的孩子的宽度,要么在您使用Expanded
or时完全忽略它Flexible
。