層疊布局和Web中的絕對(duì)定位、Android中的Frame布局是相似的,子組件可以根據(jù)距父容器四個(gè)角的位置來確定自身的位置
Stack允許子組件堆疊,而Positioned用于根據(jù)Stack的四個(gè)角來確定子組件的位置。
Stack
先看一下構(gòu)造函數(shù)
Stack({
Key key,
this.alignment = AlignmentDirectional.topStart,
this.textDirection,
this.fit = StackFit.loose,
this.overflow = Overflow.clip,
this.clipBehavior = Clip.hardEdge,
List<Widget> children = const <Widget>[],
})
屬性說明
- alignment:此參數(shù)決定如何去對(duì)齊沒有定位(沒有使用Positioned)或部分定位的子組件。所謂部分定位,在這里特指沒有在某一個(gè)軸上定位:left、right為橫軸,top、bottom為縱軸,只要包含某個(gè)軸上的一個(gè)定位屬性就算在該軸上有定位。
- textDirection:和Row、Wrap的textDirection功能一樣,都用于確定alignment對(duì)齊的參考系,即:textDirection的值為TextDirection.ltr,則alignment的start代表左,end代表右,即從左往右的順序;textDirection的值為TextDirection.rtl,則alignment的start代表右,end代表左,即從右往左的順序。
- fit:此參數(shù)用于確定沒有定位的子組件如何去適應(yīng)Stack的大小。StackFit.loose表示使用子組件的大小,StackFit.expand表示擴(kuò)伸到Stack的大小。
- overflow:此屬性決定如何顯示超出Stack顯示空間的子組件;值為Overflow.clip時(shí),超出部分會(huì)被剪裁(隱藏),值為Overflow.visible 時(shí)則不會(huì)。
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 和其它地方的意義稍微有點(diǎn)區(qū)別,此處用于配合left、top 、right、 bottom來定位組件,舉個(gè)例子,在水平方向時(shí),你只能指定left、right、width三個(gè)屬性中的兩個(gè),如指定left和width后,right會(huì)自動(dòng)算出(left+width),如果同時(shí)指定三個(gè)屬性則會(huì)報(bào)錯(cuò),垂直方向同理。