Flutter(4):基礎(chǔ)組件之Container

Flutter教學(xué)目錄持續(xù)更新中

github源代碼持續(xù)更新中

1.Container簡(jiǎn)介

一個(gè)擁有繪制玩讳、定位筝闹、調(diào)整大小的 widget涩堤。

2.組成

Container的組成如下:最里層的是child元素倦始;child元素首先會(huì)被padding包著霹俺;然后添加額外的constraints限制稳其;最后添加margin疼电。
Container的繪制的過程如下:首先會(huì)繪制transform效果分衫;接著繪制decoration模聋;然后繪制child肩民;最后繪制foregroundDecoration。
Container自身尺寸的調(diào)節(jié)分兩種情況:Container在沒有子節(jié)點(diǎn)(children)的時(shí)候链方,會(huì)試圖去變得足夠大持痰。除非constraints是unbounded限制,在這種情況下祟蚀,Container會(huì)試圖去變得足夠小工窍。帶子節(jié)點(diǎn)的Container,會(huì)根據(jù)子節(jié)點(diǎn)尺寸調(diào)節(jié)自身尺寸前酿,但是Container構(gòu)造器中如果包含了width患雏、height以及constraints,則會(huì)按照構(gòu)造器中的參數(shù)來進(jìn)行尺寸的調(diào)節(jié)薪者。

3.布局

由于Container組合了一系列的widget纵苛,這些widget都有自己的布局行為,因此Container的布局行為有時(shí)候是比較復(fù)雜的言津。
一般情況下攻人,Container會(huì)遵循如下順序去嘗試布局:對(duì)齊(alignment);調(diào)節(jié)自身尺寸適合子節(jié)點(diǎn)悬槽;采用width怀吻、height以及constraints布局;擴(kuò)展自身去適應(yīng)父節(jié)點(diǎn)初婆;調(diào)節(jié)自身到足夠小蓬坡。進(jìn)一步說:如果沒有子節(jié)點(diǎn)猿棉、沒有設(shè)置width、height以及constraints屑咳,并且父節(jié)點(diǎn)沒有設(shè)置unbounded的限制萨赁,Container會(huì)將自身調(diào)整到足夠小。如果沒有子節(jié)點(diǎn)兆龙、對(duì)齊方式(alignment)杖爽,但是提供了width、height或者constraints紫皇,那么Container會(huì)根據(jù)自身以及父節(jié)點(diǎn)的限制慰安,將自身調(diào)節(jié)到足夠小。如果沒有子節(jié)點(diǎn)聪铺、width化焕、height、constraints以及alignment铃剔,但是父節(jié)點(diǎn)提供了bounded限制撒桨,那么Container會(huì)按照父節(jié)點(diǎn)的限制,將自身調(diào)整到足夠大番宁。如果有alignment元莫,父節(jié)點(diǎn)提供了unbounded限制,那么Container將會(huì)調(diào)節(jié)自身尺寸來包住child蝶押;如果有alignment踱蠢,并且父節(jié)點(diǎn)提供了bounded限制,那么Container會(huì)將自身調(diào)整的足夠大(在父節(jié)點(diǎn)的范圍內(nèi))棋电,然后將child根據(jù)alignment調(diào)整位置茎截;含有child,但是沒有width赶盔、height企锌、constraints以及alignment,Container會(huì)將父節(jié)點(diǎn)的constraints傳遞給child于未,并且根據(jù)child調(diào)整自身撕攒。

4.屬性

key:Container唯一標(biāo)識(shí)符,用于查找更新烘浦。
alignment:控制child的對(duì)齊方式抖坪,如果container或者container父節(jié)點(diǎn)尺寸大于child的尺寸,這個(gè)屬性設(shè)置會(huì)起作用闷叉,有很多種對(duì)齊方式擦俐。
padding:decoration內(nèi)部的空白區(qū)域,如果有child的話握侧,child位于padding內(nèi)部蚯瞧。padding與margin的不同之處在于嘿期,padding是包含在content內(nèi),而margin則是外部邊界埋合,設(shè)置點(diǎn)擊事件的話备徐,padding區(qū)域會(huì)響應(yīng),而margin區(qū)域不會(huì)響應(yīng)饥悴。
color:用來設(shè)置container背景色坦喘,如果foregroundDecoration設(shè)置的話,可能會(huì)遮蓋color效果西设。
decoration:繪制在child后面的裝飾,設(shè)置了decoration的話答朋,就不能設(shè)置color屬性贷揽,否則會(huì)報(bào)錯(cuò),此時(shí)應(yīng)該在decoration中進(jìn)行顏色的設(shè)置梦碗。
foregroundDecoration:繪制在child前面的裝飾禽绪。
width:container的寬度,設(shè)置為double.infinity可以強(qiáng)制在寬度上撐滿洪规,不設(shè)置印屁,則根據(jù)child和父節(jié)點(diǎn)兩者一起布局。
height:container的高度斩例,設(shè)置為double.infinity可以強(qiáng)制在高度上撐滿雄人。
constraints:添加到child上額外的約束條件。
margin:圍繞在decoration和child之外的空白區(qū)域念赶,不屬于內(nèi)容區(qū)域础钠。
transform:設(shè)置container的變換矩陣,類型為Matrix4叉谜。
child:container中的內(nèi)容widget旗吁。

5.創(chuàng)建一個(gè)Container

1600419353280.jpg
Container(
              margin: EdgeInsets.all(10),
              color: Colors.blue,
              width: 50,
              height: 50,
              child: Container(
                margin: EdgeInsets.all(10),
                color: Colors.yellow,
              ),
            ),

6. constraints屬性簡(jiǎn)介:

這里我們父節(jié)點(diǎn)添加約束條件最小高度50,最大高度50停局,然后子節(jié)點(diǎn)設(shè)置Container高度是10很钓,結(jié)果是子節(jié)點(diǎn)高度是50,這就是父節(jié)點(diǎn)的約束起了作用


1600419378525.jpg
//定義一個(gè)redBox董栽,只設(shè)置顏色码倦,不指定寬高
  final Widget redBox = DecoratedBox(
    decoration: BoxDecoration(color: Colors.red),
  );
 Container(
              margin: EdgeInsets.only(top: 50),
              //BoxConstraints.tight(Size size),它可以生成給定大小的限制
              //BoxConstraints.expand()可以生成一個(gè)盡可能大的用以填充另一個(gè)容器
              constraints: BoxConstraints(
                  minWidth: double.infinity, //最小寬度寬度盡可能大
                  minHeight: 50, //最大高度50像素
                  maxHeight: 50),
              child: Container(
                height: 10,
//                  height: 180,
                child: redBox,
              ),
            ),

7.decoration屬性簡(jiǎn)介

我們創(chuàng)建一個(gè)帶圓角的裆泳,帶漸變顏色的Container


1600419397117.jpg
 Container(
              margin: EdgeInsets.only(top: 10, left: 10, right: 10),
              height: 80,
              decoration: BoxDecoration(
                  borderRadius: BorderRadius.circular(10),
                  gradient: LinearGradient(colors: [
                    Color(0xFF0D47A1),
                    Color(0xFF1976D2),
                    Color(0xFF42A5F5),
                  ])),
            ),

8.transform屬性簡(jiǎn)介

變換矩陣


1600419410900.jpg
  Container(
//                margin: EdgeInsets.all(10),
//                constraints: BoxConstraints.expand(
//                    height: 200),
//                constraints: BoxConstraints(
//                    minWidth: double.infinity, //寬度盡可能大
//                    minHeight: 150 //最小高度為50像素
//                    ),
              margin: EdgeInsets.only(top: 10),
              padding: EdgeInsets.all(10),
              color: Colors.blue[600],
              alignment: Alignment.center,
              child: Text(
                'Hello World',
                style: Theme.of(context)
                    .textTheme
                    .headline4
                    .copyWith(color: Colors.white),
              ),
              transform: Matrix4.rotationZ(0.1),
            ),

Container 的用途非常廣泛叹洲,屬性也是眾多,這里我們就先對(duì)他有個(gè)初步認(rèn)知工禾,跟著后面的學(xué)習(xí)就會(huì)進(jìn)一步的了解了
深入講解:Flutter(44):Layout組件之Container

下一章我們學(xué)習(xí)基礎(chǔ)組件之Row/Column

Flutter(5):基礎(chǔ)組件之Row/Column

Flutter教學(xué)目錄持續(xù)更新中

github源代碼持續(xù)更新中

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末运提,一起剝皮案震驚了整個(gè)濱河市蝗柔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌民泵,老刑警劉巖癣丧,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異栈妆,居然都是意外死亡胁编,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門鳞尔,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嬉橙,“玉大人,你說我怎么就攤上這事寥假∈锌颍” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵糕韧,是天一觀的道長(zhǎng)枫振。 經(jīng)常有香客問我,道長(zhǎng)萤彩,這世上最難降的妖魔是什么粪滤? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮雀扶,結(jié)果婚禮上杖小,老公的妹妹穿的比我還像新娘。我一直安慰自己怕吴,他們只是感情好窍侧,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著转绷,像睡著了一般伟件。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上议经,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天斧账,我揣著相機(jī)與錄音,去河邊找鬼煞肾。 笑死咧织,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的籍救。 我是一名探鬼主播习绢,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了闪萄?” 一聲冷哼從身側(cè)響起梧却,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎败去,沒想到半個(gè)月后放航,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡圆裕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年广鳍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吓妆。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡赊时,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出行拢,到底是詐尸還是另有隱情蛋叼,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布剂陡,位于F島的核電站,受9級(jí)特大地震影響狐胎,放射性物質(zhì)發(fā)生泄漏鸭栖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一握巢、第九天 我趴在偏房一處隱蔽的房頂上張望晕鹊。 院中可真熱鬧,春花似錦暴浦、人聲如沸溅话。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)飞几。三九已至,卻和暖如春独撇,著一層夾襖步出監(jiān)牢的瞬間屑墨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工纷铣, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留卵史,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓搜立,卻偏偏與公主長(zhǎng)得像以躯,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子啄踊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351