我使用了Expanded
和Flexible
小部件,它们似乎工作相同。
Expanded和Flexible之间有什么区别?
我使用了Expanded
和Flexible
小部件,它们似乎工作相同。
Expanded和Flexible之间有什么区别?
Answers:
Expanded
只是的简写 Flexible
使用扩展方式如下:
Expanded(
child: Foo(),
);
严格等于:
Flexible(
fit: FlexFit.tight,
child: Foo(),
);
您可能需要使用Flexible
过Expanded
,当你想要一个不同的fit
,在一些敏感的布局非常有用。
FlexFit.tight
和之间的区别FlexFit.loose
是,松散将使其子级具有最大的大小,同时用力迫使子级填充所有可用空间。
Maximum size
与Available space
这里的意思是一回事吗?
Flexible.tight
将迫使孩子占用整个可用空间,Flexible.loose
并让孩子做自己想做的事情。有些孩子可能会占用整个空间,有些则不会,这取决于他们的类型。
尽管您可以使用参数Fit更改它,但是默认情况下,Flexible下的窗口小部件为WRAP_CONTENT。
扩展下的小部件为MATCH_PARENT,您可以使用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
);
}
如果您使用Flexible
而不是Expanded
,则唯一的区别是,Flexible
让其子项的宽度等于或小于其Flexible
自身的宽度,同时Expanded
强制其子项的宽度与相同Expanded
。但是两者都没有Expanded
,Flexible
在给自己定尺时忽略了孩子的宽度。
Row(children:[
Flexible(
child: Container(color: Colors.red, child: Text('This is a very long text that won’t fit the line.'))),
Flexible(
child: Container(color: Colors.green, child: Text(‘Goodbye!’))),
]
)
注意:这意味着无法按Row
子项的大小按比例扩展子项。行要么使用确切的孩子的宽度,要么在使用Expanded
或时完全忽略它Flexible
。
flex
考虑因素。有关更多信息,请参见小部件的文档Expanded
。