Flutter Widget之Stack

Stack一般與Positioned配合使用渺杉,在Flutter中我們稱之為層疊布局,顧名思義琴儿,它允許子Widget按照代碼順序堆疊起來(lái)孕索。并可以利用其相關(guān)屬性調(diào)整其子Widget的位置∪停看如下代碼:

Container (
  width: 300,
  height: 300,
  color: Colors.blue,
  child: Stack(
    children: [
      Positioned(child: Text("頂部居左"), left: 18,),
      Positioned(child: Text("底部居左"), left: 18, bottom: 18,),
      Positioned(child: Text("頂部居右"), right: 18 top: 18,),
      Positioned(child: Text("底部居右"), right: 18, bottom: 18,),
    ],
  ),
);

運(yùn)行效果:


通過(guò)Positioned的left哀墓,top,right喷兼,bottom屬性篮绰;在Stack中絕對(duì)定位到相應(yīng)位置

  • alignment屬性
    作用是確定未指定位置信息的元素的對(duì)齊方式,屬于AlignmentGeometry類型(包括Alignment和AlignmentDirectional季惯、FractionalOffset吠各,Alignment和AlignmentDirectional使用方式相同,區(qū)別是AlignmentDirectional可以適配不同的TextDirection(ltr勉抓,rtl))贾漏。如下代碼:
Container (
  width: 300,
  height: 300,
  color: Colors.blue,
  child: Stack(
    // 未被Positioned包括或沒有設(shè)置位置的Widget對(duì)齊方式
    alignment: Alignment.center,
    children: [
      Text("沒有Positioned"),
      Positioned(child: Text("居中")),
      Positioned(child: Text("頂部居左"), left: 18,),
      Positioned(child: Text("底部居左"), left: 18, bottom: 18,),
      Positioned(child: Text("頂部居右"), right: 18 top: 18,),
      Positioned(child: Text("底部居右"), right: 18, bottom: 18,),
    ],
  ),
);

運(yùn)行效果:


我們?cè)O(shè)置了alignment值為 Alignment.center。那么居左的Text藕筋,現(xiàn)在在垂直方向上居中了纵散。沒有設(shè)置上下左右間距的居中Widget和沒有被Positioned包括的Text與相對(duì)于父Widget居中了。

  • fit屬性
    在Stack中還有另外一個(gè)屬性fit,我們可以通過(guò)fit屬性來(lái)設(shè)置未指定位置的子Widget的空間大小伍掀。
    fit有三個(gè)值可選:
enum StackFit {
   // 使用子Widget 自身的大小
   loose,
   // 使子widget與stack大小一致
   expand,
   // stack的父widget的布局大小約束無(wú)修改的傳遞給 Stack 的子Widget
   passthrough,
}

我們來(lái)看一下:loose

Container(
  width: 300,
  height: 300,
  color: Colors.blue,
  child: Stack(
    fit: StackFit.loose,
    children: [
      Container(
          width: 200,
          height: 20,
          color: Colors.orange,
          child: Text("沒有Positioned")
      ),
      Positioned(child: Text("底部居左"), left: 18, bottom: 18,),
    ],
  ),
);

運(yùn)行效果:



我們發(fā)現(xiàn)設(shè)置fit: StackFit.loose后橘色區(qū)域與設(shè)置的寬高一致掰茶,我們看設(shè)置fit: StackFit.expand的效果:



說(shuō)明fit屬性為 StackFit.expand時(shí),沒有設(shè)置定位的子widget會(huì)占滿stack蜜笤。
passthrough官方文檔說(shuō)明的是將stack的父widget的布局大小約束無(wú)修改的傳遞給 Stack 的子Widget濒蒋。試過(guò)之后發(fā)現(xiàn)與expand效果一致,也許還有其它區(qū)別尚未發(fā)現(xiàn)把兔。
  • clipBehavior屬性
    有四個(gè)值:
enum Clip {
    // 不裁剪
    none,
    // 裁剪沪伙,不抗鋸齒
    hardEdge,
    // 裁剪,抗鋸齒
    antiAlias,
    // 裁剪垛贤,抗鋸齒
    antiAliasWithSaveLayer,
}

當(dāng)clipBehavior屬性為none時(shí)焰坪,超出部分不會(huì)被裁剪;為hardEdge聘惦,antiAlias某饰,antiAliasWithSaveLayer時(shí),超出部分會(huì)被裁剪善绎。默認(rèn)是hardEdge黔漂。
代碼如下:

Container(
    width: 300,
    height: 300,
    color: Colors.blue,
    child: Stack(
      clipBehavior: Clip.none,
      children: const [
        Positioned(left: 250, bottom: 18,child: Text("我是一段很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)很長(zhǎng)的文字"),),
      ],
    ),
  );

運(yùn)行效果:



屬性為hardEdge,antiAlias禀酱,antiAliasWithSaveLayer時(shí)炬守,運(yùn)行效果:



Stack的直接子類有IndexedStack,其中有一個(gè)index屬性剂跟,為可見子組件的index位置减途。這里就不細(xì)說(shuō)了。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末曹洽,一起剝皮案震驚了整個(gè)濱河市鳍置,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌送淆,老刑警劉巖税产,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異偷崩,居然都是意外死亡辟拷,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門阐斜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)衫冻,“玉大人,你說(shuō)我怎么就攤上這事谒出∮鸾埽” “怎么了渡紫?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)考赛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)莉测,這世上最難降的妖魔是什么颜骤? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮捣卤,結(jié)果婚禮上忍抽,老公的妹妹穿的比我還像新娘。我一直安慰自己董朝,他們只是感情好鸠项,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著子姜,像睡著了一般祟绊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哥捕,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天牧抽,我揣著相機(jī)與錄音,去河邊找鬼遥赚。 笑死扬舒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的凫佛。 我是一名探鬼主播讲坎,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼愧薛!你這毒婦竟也來(lái)了晨炕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厚满,失蹤者是張志新(化名)和其女友劉穎府瞄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碘箍,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡遵馆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了丰榴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片货邓。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖四濒,靈堂內(nèi)的尸體忽然破棺而出换况,到底是詐尸還是另有隱情职辨,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布戈二,位于F島的核電站舒裤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏觉吭。R本人自食惡果不足惜腾供,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鲜滩。 院中可真熱鬧伴鳖,春花似錦、人聲如沸徙硅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嗓蘑。三九已至须肆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間脐往,已是汗流浹背休吠。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留业簿,地道東北人瘤礁。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像梅尤,于是被迫代替她去往敵國(guó)和親柜思。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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