Flutter 頁面層疊組件與定位組件

Flutter Stack組件

Stack表示堆的意思,我們可以用Stack或者Stack結(jié)合Align或者Stack結(jié)合Postitiond來實現(xiàn)頁面的定位布局

屬性 說明
alignment 配置所有子元素的顯示位置
children 子組件

Stack組件,可以讓組件下children內(nèi)的所有組件進行堆疊.再通過alignment屬性來設(shè)置堆疊布局的位置
簡單看一個Stack堆疊

import 'package:flutter/material.dart';
class StackPage extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'stack page',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Stack Page')
        ),
        body: PageWidget()
      ),
    );
  }
}

class PageWidget extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Stack(
      alignment: Alignment.center,  //- Stack 下的所有元素都以中心對齊堆疊
      children: <Widget>[
        Container(
          width:300.0,
          height:400.0,
          color: Colors.orangeAccent,
        ),
        Container(
          width:100.0,
          height:150.0,
          color: Colors.pinkAccent
        ),
        Text('我是文本'),  //- 文本在最下面加載,才能夠顯示在最上面,如果順序不同,可能文字被其他區(qū)塊遮擋
      ],
    );
  }
}

頁面效果:

image.png

上面的demo中,我們使用了一個關(guān)鍵屬性alignment,具體排列可以參考Alignment下的方位屬性.當然我們也可以不使用Alignment的方位屬性,可以使用Alignment指定方位.需要直接實例化Alignment()這個類,傳入X,Y的值.區(qū)間為-1 到 1.對應X軸和Y軸的坐標位置.

class PageWidget extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Stack(
      alignment: Alignment(1,1),  //- Alignment()實例化類傳入XY的坐標,區(qū)間為-1 到 1
      children: <Widget>[
        Container(
          width:300.0,
          height:400.0,
          color: Colors.orangeAccent,
        ),
        Container(
          width:100.0,
          height:150.0,
          color: Colors.pinkAccent
        ),
        Text('我是文本'),  //- 文本在最下面加載,才能夠顯示在最上面,如果順序不同,可能文字被其他區(qū)塊遮擋
      ],
    );
  }
}

我們設(shè)置Alignment實例化類里傳入1,1對應為X軸和Y軸最大值.那么應該是右下角.手機上顯示為:

image.png

容器內(nèi)有多個元素需要定位

我們在使用Stack組件進行子組件布局的時候,沒法對單一組件進行定位.這個時候我們就需要使用Stack結(jié)合Align或者Positioned屬性進行實現(xiàn).

Stack配合Align實現(xiàn)單一子組件定位:
屬性 說明
alignment 配置所有子元素的顯示位置
child 子組件
class PageWidget extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Container(
      height:400.0,
      width: 300.0,
      color:Colors.orangeAccent,
      child: Stack(
        children: <Widget>[
          Align(
            alignment: Alignment.topCenter,
            child: Icon(Icons.home, size: 40, color: Colors.white),
          ),
          Align(
            alignment: Alignment(0.7, 1),
            child: Icon(Icons.search, size: 30, color: Colors.blue),
          ),
          Align(
            alignment: Alignment(0, 0),
            child: Icon(Icons.bubble_chart, size: 80, color: Colors.red),
          ),
          Align(
            alignment: Alignment.centerLeft,
            child: Container(
              width:80.0,
              height:160.0,
              color: Colors.blueGrey
            ),
          ) 
        ],
      ),
    );
  }
}

實現(xiàn)效果:


image.png
Stack配合Align實現(xiàn)單一子組件定位:
屬性 說明
top 子元素距離頂部的距離
bottom 子元素距離底部的距離
left 子元素距離左邊的距離
right 子元素距離右邊的距離
child 子組件

代碼:

class PageWidget extends StatelessWidget{
  @override
  Widget build(BuildContext context) {
    return Container(
      height:400.0,
      width: 300.0,
      color:Colors.orangeAccent,
      child: Stack(
        children: <Widget>[
          Positioned(
            left:10,
            child: Icon(Icons.home, size: 40, color: Colors.white),
          ),
          Positioned(
            bottom: 50,
            child: Icon(Icons.search, size: 30, color: Colors.blue),
          ),
          Positioned(
            bottom: 100,
            child: Icon(Icons.bubble_chart, size: 80, color: Colors.red),
          ),
          Positioned(
            left:50,
            top:50,
            child: Container(
              width:80.0,
              height:160.0,
              color: Colors.blueGrey
            ),
          ) 
        ],
      ),
    );
  }
}

頁面效果:


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末埃难,一起剝皮案震驚了整個濱河市熄求,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蝠猬,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件踪少,死亡現(xiàn)場離奇詭異生兆,居然都是意外死亡叭喜,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門靖榕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來标锄,“玉大人,你說我怎么就攤上這事茁计×匣剩” “怎么了?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵簸淀,是天一觀的道長瓶蝴。 經(jīng)常有香客問我,道長租幕,這世上最難降的妖魔是什么舷手? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮劲绪,結(jié)果婚禮上男窟,老公的妹妹穿的比我還像新娘。我一直安慰自己贾富,他們只是感情好歉眷,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颤枪,像睡著了一般汗捡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天扇住,我揣著相機與錄音春缕,去河邊找鬼。 笑死艘蹋,一個胖子當著我的面吹牛锄贼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播女阀,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼宅荤,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了浸策?” 一聲冷哼從身側(cè)響起冯键,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎庸汗,沒想到半個月后琼了,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡夫晌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年雕薪,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晓淀。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡所袁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出凶掰,到底是詐尸還是另有隱情燥爷,我是刑警寧澤,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布懦窘,位于F島的核電站前翎,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏畅涂。R本人自食惡果不足惜港华,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望午衰。 院中可真熱鬧立宜,春花似錦、人聲如沸臊岸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帅戒。三九已至灯帮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钟哥。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工响疚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瞪醋。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像装诡,于是被迫代替她去往敵國和親银受。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

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