它是一個Widget,寫過前端代碼的童鞋應該都瞭解這個屬性,它就是設置內邊距屬性。經過Padding,能夠有效地在子級的四周建立空的區域,內邊距的空白區域,也是widget的一部分。html
Padding的佈局分爲兩種狀況:前端
此外,須要注意的是,Flutter中並無單獨的Margin控件。在Container中雖然也有margin屬性,但咱們看看源碼關於margin的實現:git
if (margin != null)
current = new Padding(padding: margin, child: current);
複製代碼
從上面不難看出Flutter淡化了margin以及padding的區別,margin實質上也是由Padding Widget 來實現的。github
爲何要使用一個Padding Widget組件,而不是一個 Container 容器用一個Container.padding 屬性?api
實際上二者的本質沒有任何區別,若是你用了Container.padding 參數,那麼 Container 實際上也是會幫你建立一個簡單的 Padding Widget。Padding自己是很是簡單的,基本上須要間距的地方,它都可以使用;若是在單一的內間距場景,使用Padding比Container的成本要小一些,由於Container裏面除了Padding,它還包含了不少個widget。Padding可以實現的,Container都可以實現,只不過,Container提供的東西更多。Container 將許多更簡單的小部件組合到一個 package 去進去了。bash
實際上,Flutter中的大多數Widgets都只是其餘更簡單的Widgets的組合。組合而不是繼承,這是是構建Widgets的主要機制。函數
Object -> Diagnosticable -> DiagnosticableTree -> Widget -> RenderObjectWidget -> SingleChildRenderObjectWidget -> Padding佈局
Padding({ Key key, @ required EdgeInsetsGeometry padding, Widget child }) 建立一個攜帶子項的Widget,傳入參數不爲空,不然會報異常。ui
const Padding({
Key key,
@required this.padding,
Widget child,
}) : assert(padding != null),
super(key: key, child: child);
複製代碼
padding → EdgeInsetsGeometrythis
child → widget
hashCode → int
key → Key
runtimeType → 類型
createRenderObject(BuildContext context) → RenderPadding
建立一個RenderObject 類,RenderObjectWidget表示的實例。
debugFillProperties(DiagnosticPropertiesBuilder properties) →void
添加與節點關聯的其餘屬性。
updateRenderObject(BuildContext context, covariant RenderPadding renderObject) →void
顧名思義該方法用於將此RenderObjectWidget描述的配置,複製到給定的RenderObject 對象。該類型與此對象的createRenderObject返回的類型相同。
使用示例:
Padding(
padding: EdgeInsets.all(10.0),
child: const Card(child: Text('Flutter Padding Example')),
)
複製代碼
Padding 自己算是很是簡單的Widget了,它主要用做設置子控件的內邊距。Padding 能實現的,Container都可以實現。只不過,Container組合了更多的簡單Widget進去,平時開發中咱們能夠根據實際須要來使用 Padding 或者 Container。
xiaosongzeem |