Flutter開發(fā)之Container Widget

Container Widget

一個方便的小部件, 結(jié)合了普通的繪畫抛虏、定位和大小的小部件双絮。

容器首先用填充物(由裝飾中存在的任何邊界膨脹)包圍子對象蛀柴,然后對填充范圍應用附加約束(如果其中一個為非空佣耐,則將寬度和高度合并為約束)。然后容器被從邊緣描述的額外的空白空間包圍采盒。

在繪畫過程中旧乞,容器首先應用給定的變換,然后繪制裝飾填充填充范圍磅氨,然后繪制子對象尺栖,最后繪制前場裝飾,也填充填充填充范圍悍赢。

沒有子對象的容器盡量大决瞳,除非傳入的約束是無限的货徙,在這種情況下左权,它們盡量小。有子對象的容器會根據(jù)子對象的大小來調(diào)整大小痴颊。構(gòu)造函數(shù)的width赏迟、height和constraints參數(shù)重寫了這一點。

布局行為介紹(Layout behavior)

有關(guān)框布局模型的介紹蠢棱,請參閱BoxConstraints锌杀。

由于Container結(jié)合了許多其他小部件,每個小部件都有自己的布局行為泻仙,因此Container的布局行為有點復雜糕再。

摘要:容器嘗試按順序:遵循對齊,將自身大小調(diào)整為子對象玉转,以符合寬度突想,高度和約束,以擴展以適合父對象,盡可能小猾担。

進一步來說:

如果窗口小部件沒有子節(jié)點袭灯,沒有高度,沒有寬度绑嘹,沒有約束稽荧,并且父節(jié)點提供無限制約束,則Container嘗試盡可能小工腋。

如果窗口小部件沒有子節(jié)點且沒有對齊姨丈,但提供了高度,寬度或約束擅腰,則在給定這些約束和父節(jié)點約束的組合的情況下构挤,Container會盡可能小。

如果窗口小部件沒有子節(jié)點惕鼓,沒有高度筋现,沒有寬度,沒有約束箱歧,沒有對齊矾飞,但是父節(jié)點提供了有界約束,那么Container會擴展以適應父節(jié)點提供的約束呀邢。

如果窗口小部件具有對齊洒沦,并且父窗口提供無限制約束,則Container會嘗試圍繞子窗口調(diào)整自身大小价淌。

如果窗口小部件具有對齊申眼,并且父窗口提供有界約束,則Container會嘗試展開以適合父窗口蝉衣,然后根據(jù)對齊方式將子項置于其自身內(nèi)部括尸。

否則,窗口小部件具有子級但沒有高度病毡,沒有寬度濒翻,沒有約束,也沒有對齊啦膜,并且Container將約束從父級傳遞給子級并調(diào)整其大小以匹配子級有送。

邊距和填充屬性也會影響布局,如這些屬性的文檔中所述僧家。 (它們的效果僅僅增加了上述規(guī)則雀摘。)裝飾可以隱含地增加填充(例如,BoxDecoration中的邊界有助于填充);請參閱Decoration.padding八拱。

此示例顯示一個48x48琥珀色方塊(放置在中心小部件內(nèi)阵赠,以防父小部件對容器應采用的大小有自己的意見)烁落,并留有一個空白,使其遠離相鄰小部件:

Container

Center(
  child: Container(
    margin: const EdgeInsets.all(10.0),
    color: Colors.amber[600],
    width: 48.0,
    height: 48.0,
  ),
)

這個例子展示了如何同時使用容器的許多特性豌注。這些約束被設(shè)置為適合字體大小加上足夠的垂直凈空伤塌,同時水平展開以適合父級。填充用于確保內(nèi)容和文本之間有空間轧铁。這個顏色使盒子變成藍色每聪。對齊會使子項在框中居中。最后齿风,變換對整個裝置應用輕微的旋轉(zhuǎn)以完成效果:

屏幕快照 2019-05-25 下午6.39.27.png
Container(
  constraints: BoxConstraints.expand(
    height: Theme.of(context).textTheme.display1.fontSize * 1.1 + 200.0,
  ),
  padding: const EdgeInsets.all(8.0),
  color: Colors.blue[600],
  alignment: Alignment.center,
  child: Text('Hello World',
    style: Theme.of(context)
        .textTheme
        .display1
        .copyWith(color: Colors.white)),
  transform: Matrix4.rotationZ(0.1),
)

也可以看看:

AnimatedContainer药薯,一種在變化時平滑動畫屬性的變體。
邊框救斑,其中包含大量使用Container的示例童本。
墨水,在材質(zhì)上繪制裝飾脸候,允許InkResponse和InkWell噴濺在它們上面繪畫穷娱。
布局小部件的目錄。

構(gòu)造方法(Constructors)

創(chuàng)建一個小部件, 結(jié)合了普通的繪畫运沦、定位和大小調(diào)整小部件泵额。

Container({Key key, 
    AlignmentGeometry alignment,
    EdgeInsetsGeometry padding, 
    Color color, 
    Decoration decoration, 
    Decoration foregroundDecoration, 
    double width, 
    double height, 
    BoxConstraints constraints, EdgeInsetsGeometry margin, 
    Matrix4 transform, 
    Widget child 
})

屬性(Properties)

  • alignment → AlignmentGeometry

    • 對齊內(nèi)部的子級
  • child → Widget

    • 容器內(nèi)部的子級
  • constraints → BoxConstraints

    • 要應用于子級的附加約束
  • decoration → Decoration

    • 子級背后的裝飾
    • 可以設(shè)置邊框、背景色携添、背景圖片嫁盲、圓角等屬性
    • 需要注意的是 deorationcolor 背景顏色不能共存,二者同時只能有一個
    decoration: new BoxDecoration(
                   border: new Border.all(width: 2.0, color: Colors.red),
                   color: Colors.grey,
                   borderRadius: new BorderRadius.all(new Radius.circular(20.0)),
                   image: new DecorationImage(
                     image: new NetworkImage('http://b-ssl.duitang.com/uploads/item/201609/26/20160926203611_HXQxk.jpeg'),
                     centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
                   ),
                 ),
    
    
    • no decoration

      -
      decoration
    • 第一張圖設(shè)置了背景色烈掠,未使用decoration羞秤;第二張圖設(shè)置了decoration,未設(shè)置背景色

  • foregroundDecoration → Decoration

    • 在子級前面的裝飾
    • 可以設(shè)置邊框左敌、背景色瘾蛋、背景圖片、圓角等屬性
    • 需要注意的是 deorationcolor 背景顏色不能共存母谎,二者同時只能有一個
    foregroundDecoration: new BoxDecoration(
                   border: new Border.all(width: 2.0, color: Colors.red),
                   color: Colors.grey,
                   borderRadius: new BorderRadius.all(new Radius.circular(20.0)),
                   image: new DecorationImage(
                     image: new NetworkImage('http://b-ssl.duitang.com/uploads/item/201609/26/20160926203611_HXQxk.jpeg'),
                     centerSlice: new Rect.fromLTRB(270.0, 180.0, 1360.0, 730.0),
                   ),
                 ),
    
    
    • foregroundDecoration
    • 第一張圖設(shè)置了背景色瘦黑,未使用decoration京革;第二張圖設(shè)置了decoration奇唤,未設(shè)置背景色

  • margin → EdgeInsetsGeometry

    • 我的理解就是外邊距
  • padding → EdgeInsetsGeometry

    • 我的理解就是內(nèi)邊距
  • transform → Matrix4

    • 在繪制容器之前要應用的轉(zhuǎn)換矩陣
  • hashCode → int

    • 此對象的哈希代碼
  • key → Key

    • 控制一個小部件如何替換樹中的另一個小部件
  • runtimeType → Type

    • 對象的運行時類型

方法(Methods)

  • build(BuildContext context) → Widget

    描述此窗口小部件表示的用戶界面部分

  • debugFillProperties(DiagnosticPropertiesBuilder properties) → void

    添加與節(jié)點關(guān)聯(lián)的其他屬性

  • createElement() → StatelessElement

    創(chuàng)建StatelessElement以管理此窗口小部件在樹中的位置

  • debugDescribeChildren() → List<DiagnosticsNode>

    返回描述此節(jié)點的子節(jié)點的DiagnosticsNode對象列表。

  • noSuchMethod(Invocation invocation) → dynamic

    訪問不存在的方法或?qū)傩詴r調(diào)用

  • toDiagnosticsNode({String name, DiagnosticsTreeStyle style }) → DiagnosticsNode

    返回調(diào)試工具和DiagnosticsNode.toStringDeep使用的對象的調(diào)試表示形式

  • toString({DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String

    返回此對象的字符串表示形式

  • toStringDeep({String prefixLineOne: '', String prefixOtherLines, DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String

    返回此節(jié)點及其后代的字符串表示形式

  • toStringShallow({String joiner: ', ', DiagnosticLevel minLevel: DiagnosticLevel.debug }) → String

    返回對象的單行詳細描述

  • toStringShort() → String

    這個小部件的簡短文字描述

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末匹摇,一起剝皮案震驚了整個濱河市咬扇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廊勃,老刑警劉巖懈贺,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件经窖,死亡現(xiàn)場離奇詭異,居然都是意外死亡梭灿,警方通過查閱死者的電腦和手機画侣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來堡妒,“玉大人配乱,你說我怎么就攤上這事∑こ伲” “怎么了搬泥?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長伏尼。 經(jīng)常有香客問我忿檩,道長,這世上最難降的妖魔是什么爆阶? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任燥透,我火速辦了婚禮,結(jié)果婚禮上辨图,老公的妹妹穿的比我還像新娘兽掰。我一直安慰自己,他們只是感情好徒役,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布孽尽。 她就那樣靜靜地躺著,像睡著了一般忧勿。 火紅的嫁衣襯著肌膚如雪杉女。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天鸳吸,我揣著相機與錄音熏挎,去河邊找鬼。 笑死晌砾,一個胖子當著我的面吹牛坎拐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播养匈,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼哼勇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了呕乎?” 一聲冷哼從身側(cè)響起积担,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎猬仁,沒想到半個月后帝璧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體先誉,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年的烁,在試婚紗的時候發(fā)現(xiàn)自己被綠了褐耳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡渴庆,死狀恐怖漱病,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情把曼,我是刑警寧澤杨帽,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站嗤军,受9級特大地震影響注盈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叙赚,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一老客、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧震叮,春花似錦胧砰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至击罪,卻和暖如春哲嘲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背媳禁。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工眠副, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竣稽。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓囱怕,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毫别。 傳聞我的和親對象是個殘疾皇子娃弓,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內(nèi)容