順風(fēng)而呼污茵,聲非加疾也,而聞?wù)哒谩?/p>
???? Flutter學(xué)習(xí)之七 Expanded
前言
前面的一些章節(jié)中阵面,Container
多多少少出現(xiàn)過,這到底是個啥呢?本章節(jié)我就個人理解來介紹一下這個常用的容器類組件样刷。
正文
Container
是一個組合類容器仑扑,它本身不對應(yīng)具體的RenderObject
,它是DecoratedBox
置鼻、ConstrainedBox
镇饮、Transform
、Padding
箕母、Align
等組件組合的一個多功能容器盒让,所以我們只需通過一個Container
組件可以實現(xiàn)同時需要裝飾、變換司蔬、限制的場景邑茄。Container
的定義如下:
Container({
Key? key,
this.alignment,
this.padding,
this.color,
this.decoration,
this.foregroundDecoration,
double? width,
double? height,
BoxConstraints? constraints,
this.margin,
this.transform,
this.transformAlignment,
this.child,
this.clipBehavior = Clip.none,
})
-
padding
: 內(nèi)邊距,容器內(nèi)留白俊啼,限定容器內(nèi)子組件到容器的邊距肺缕。 -
margin
:外邊距,容器外留白授帕,限定容器外的其它組件到容器的邊距同木。 -
decoration
:前景裝飾,與color
互斥跛十。原因是當指定color
時彤路,Container
內(nèi)會自動創(chuàng)建一個decoration
。 -
constraints
:容器大小的限制條件芥映,約束洲尊。可以與width奈偏、height
同時存在坞嘀,但是后者優(yōu)先級高。原因是Container
內(nèi)部會根據(jù)width惊来、height
來生成一個constraints
丽涩。
Container特點
-
1、沒有child的時候?qū)捀吣J為0
下面是類初始化時候默認值:
1.png
2.png
從圖1和圖2可以看出裁蚁,在不設(shè)置寬矢渊、高以及不設(shè)置子組件的時候,會生成一個最大寬高都為0的Box枉证,這個Box作為子組件矮男,也就是current,請記住這個current刽严。整個demo:
body上放個Column昂灵,Column一個child為Container,然后給個紅色的背景顏色舞萄,看下效果眨补。
發(fā)現(xiàn)啥也沒有,看來的確寬高默認0倒脓。給個高度試下:
看效果:
因為body默認寬度為屏寬撑螺,所以寬度是這樣子的。
-
2崎弃、有child的時候甘晤,就按照child約束來:
給Container加個子組件看下:
6.png
效果如下
7.png
其實在給一個組件設(shè)置屬性的時候,本質(zhì)是在當前child又包了一層裝飾型組件饲做,從源碼中可以看出:
8.png
總結(jié)
如果想給一個組件設(shè)置color线婚、alignment、padding盆均、margin塞弊、transform以及裝飾器decoration(圓角、陰影)泪姨,那么就可以在這個組件外包一層Container游沿,然后直接設(shè)置即可。
后記
代碼只看還是不行的肮砾,有些東西寫著寫著就理解了诀黍。紙上得來終覺淺,絕知此事要躬行~