彈性布局允許子組件按照一定比例來(lái)分配父容器空間庄呈。Flutter中的彈性布局主要通過(guò)Flex和Expanded來(lái)配合實(shí)現(xiàn)。
Flex
Flex組件可以沿著水平或垂直方向排列子組件,如果你知道主軸方向媳瞪,使用Row或Column會(huì)方便一些抑片,因?yàn)镽ow和Column都繼承自Flex,參數(shù)基本相同硫惕,所以能使用Flex的地方基本上都可以使用Row或Column茧痕。Flex本身功能是很強(qiáng)大的,它也可以和Expanded組件配合實(shí)現(xiàn)彈性布局恼除。
Flex繼承自MultiChildRenderObjectWidget踪旷,對(duì)應(yīng)的RenderObject為RenderFlex,RenderFlex中實(shí)現(xiàn)了其布局算法
Expanded
可按比例擴(kuò)伸Row豁辉、Column和Flex子組件所占用的空間令野,如下代碼所示:
const Expanded({
int flex=1,
@required Widget child,
})
flex參數(shù)為彈性系數(shù),如果為0或null徽级,則child是沒(méi)有彈性的气破,即不會(huì)被擴(kuò)伸占用的空間。如果大于0餐抢,所有的Expanded按照其flex的比例來(lái)分割主軸的全部空閑空間