層疊布局 Stack音半、Positioned

介紹

層疊布局和Web中的絕對定位、Android中的Frame布局是相似的玖喘,子組件可以根據(jù)距父容器四個角的位置來確定自身的位置甩牺。絕對定位允許子組件堆疊起來(按照代碼中聲明的順序)。Flutter中使用Stack和Positioned這兩個組件來配合實現(xiàn)絕對定位累奈。Stack允許子組件堆疊贬派,而Positioned用于根據(jù)Stack的四個角來確定子組件的位置。

先簡單使用下Stack

import 'package:flutter/material.dart';

main(List<String> args) {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "demo",
      home: Scaffold(
        appBar: AppBar(title: Text("bar")),
        body: HomeContent(),
      ),
    );    
  }
}

class HomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Stack(
      children: [
        Container(
          height: 300,
          width: 300,
          color: Colors.blue[200],
        ),
        Text("一段文字")
      ],
    ));    
  }
}

可以發(fā)現(xiàn)澎媒,正常情況下搞乏,當(dāng)Text和Container組件并排時,文字會出現(xiàn)在盒子的后面旱幼,但是使用了stack后查描,文字與盒子出現(xiàn)在同一區(qū)域(其實是文字在盒子上面)。


image.png
參數(shù)列表
Stack({
  this.alignment = AlignmentDirectional.topStart,
  this.textDirection,
  this.fit = StackFit.loose,
  this.overflow = Overflow.clip,
  List<Widget> children = const <Widget>[],
})
  • alignment:此參數(shù)決定如何去對齊沒有定位(沒有使用Positioned)或部分定位的子組件柏卤。所謂部分定位冬三,在這里特指沒有在某一個軸上定位:leftright為橫軸缘缚,top勾笆、bottom為縱軸,只要包含某個軸上的一個定位屬性就算在該軸上有定位桥滨。
  • textDirection:和Row窝爪、WraptextDirection功能一樣,都用于確定alignment對齊的參考系齐媒,即:textDirection的值為TextDirection.ltr蒲每,則alignmentstart代表左,end代表右喻括,即從左往右的順序邀杏;textDirection的值為TextDirection.rtl,則alignment的start代表右唬血,end代表左望蜡,即從右往左的順序唤崭。
  • fit:此參數(shù)用于確定沒有定位的子組件如何去適應(yīng)Stack的大小。StackFit.loose表示使用子組件的大小脖律,StackFit.expand表示擴伸到Stack的大小谢肾。
  • overflow:此屬性決定如何顯示超出Stack顯示空間的子組件;值為Overflow.clip時小泉,超出部分會被剪裁(隱藏)芦疏,值為Overflow.visible 時則不會。
Positioned
const Positioned({
  Key key,
  this.left, 
  this.top,
  this.right,
  this.bottom,
  this.width,
  this.height,
  @required Widget child,
})

left膏孟、top 眯分、right拌汇、 bottom分別代表離Stack左柒桑、上、右噪舀、底四邊的距離魁淳。width和height用于指定需要定位元素的寬度和高度。注意与倡,Positioned的width界逛、height 和其它地方的意義稍微有點區(qū)別,此處用于配合left纺座、top 息拜、right、 bottom來定位組件净响,舉個例子少欺,在水平方向時,你只能指定left馋贤、right赞别、width三個屬性中的兩個,如指定left和width后配乓,right會自動算出(left+width)仿滔,如果同時指定三個屬性則會報錯,垂直方向同理犹芹。

import 'package:flutter/material.dart';

main(List<String> args) {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "demo",
      home: Scaffold(
        appBar: AppBar(title: Text("bar")),
        body: HomeContent(),
      ),
    );    
  }
}

class HomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Container(
      width: 300,
      height: 300,
      color: Colors.blue[200],
      child: Stack(
        children: <Widget>[
          Positioned(
            left: 0,
            top: 0,
            child: Icon(Icons.home),
          ),
          Positioned(
            right: 0,
            bottom: 0,
            child: Icon(Icons.home),
          ),
          Positioned(
            left: 150,
            top: 150,
            child: Icon(Icons.home),
          )
        ],
      ),
    ));    
  }
}
image.png

注意要考慮元素自身的大小

Align

參數(shù)列表

Align({
  Key key,
  this.alignment = Alignment.center,
  this.widthFactor,
  this.heightFactor,
  Widget child,
})
  • alignment : 需要一個AlignmentGeometry類型的值崎页,表示子組件在父組件中的起始位置。AlignmentGeometry 是一個抽象類腰埂,它有兩個常用的子類:AlignmentFractionalOffset飒焦,我們將在下面的示例中詳細(xì)介紹。
  • widthFactorheightFactor是用于確定Align 組件本身寬高的屬性盐固;它們是兩個縮放因子荒给,會分別乘以子元素的寬丈挟、高,最終的結(jié)果就是Align 組件的寬高志电。如果值為null曙咽,則組件的寬高將會占用盡可能多的空間。
import 'package:flutter/material.dart';

main(List<String> args) {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: "demo",
      home: Scaffold(
        appBar: AppBar(title: Text("bar")),
        body: HomeContent(),
      ),
    );    
  }
}

class HomeContent extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(child: Container(
      width: 300,
      height: 300,
      color: Colors.blue[200],
      child: Stack(
        children: <Widget>[
          Align(
            alignment: Alignment(1, 1),
            child: Icon(Icons.home),
          ),
          Align(
            alignment: Alignment(0, 0),
            child: Icon(Icons.home),
          ),
          Align(
            alignment: Alignment(-1, -1),
            child: Icon(Icons.home),
          )
        ],
      ),
    ));    
  }
}
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挑辆,一起剝皮案震驚了整個濱河市例朱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鱼蝉,老刑警劉巖洒嗤,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異魁亦,居然都是意外死亡渔隶,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門洁奈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來间唉,“玉大人,你說我怎么就攤上這事利术〕室埃” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵印叁,是天一觀的道長被冒。 經(jīng)常有香客問我,道長轮蜕,這世上最難降的妖魔是什么昨悼? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮肠虽,結(jié)果婚禮上幔戏,老公的妹妹穿的比我還像新娘。我一直安慰自己税课,他們只是感情好闲延,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著韩玩,像睡著了一般垒玲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上找颓,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天合愈,我揣著相機與錄音,去河邊找鬼。 笑死佛析,一個胖子當(dāng)著我的面吹牛益老,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寸莫,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼捺萌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了膘茎?” 一聲冷哼從身側(cè)響起桃纯,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎披坏,沒想到半個月后态坦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡棒拂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年伞梯,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片着茸。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡壮锻,死狀恐怖琐旁,靈堂內(nèi)的尸體忽然破棺而出涮阔,到底是詐尸還是另有隱情,我是刑警寧澤灰殴,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布敬特,位于F島的核電站,受9級特大地震影響牺陶,放射性物質(zhì)發(fā)生泄漏伟阔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一掰伸、第九天 我趴在偏房一處隱蔽的房頂上張望皱炉。 院中可真熱鬧,春花似錦狮鸭、人聲如沸合搅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽灾部。三九已至,卻和暖如春惯退,著一層夾襖步出監(jiān)牢的瞬間赌髓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锁蠕,地道東北人夷野。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像荣倾,于是被迫代替她去往敵國和親扫责。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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