Align
Align 組件可以調(diào)整子組件的位置,并且可以根據(jù)子組件的寬高來確定自身的的寬高,定義如下:
Align({
? Key key,
? this.alignment = Alignment.center,
? this.widthFactor,
? this.heightFactor,
? Widget child,
})
alignment : 需要一個AlignmentGeometry類型的值康吵,表示子組件在父組件中的起始位置。AlignmentGeometry 是一個抽象類访递,它有兩個常用的子類:Alignment和 FractionalOffset晦嵌。
widthFactor和heightFactor是用于確定Align 組件本身寬高的屬性;它們是兩個縮放因子拷姿,會分別乘以子元素的寬惭载、高,最終的結(jié)果就是Align 組件的寬高响巢。如果值為null棕兼,則組件的寬高將會占用盡可能多的空間。
Align和Stack對比
Align和Stack/Positioned都可以用于指定子元素相對于父元素的偏移抵乓,但它們有兩個主要區(qū)別:
定位參考系統(tǒng)不同伴挚;Stack/Positioned定位的的參考系可以是父容器矩形的四個頂點;而Align則需要先通過alignment 參數(shù)來確定坐標原點灾炭,不同的alignment會對應不同原點茎芋,最終的偏移是需要通過alignment的轉(zhuǎn)換公式來計算出。
Stack可以有多個子元素蜈出,并且子元素可以堆疊田弥,而Align只能有一個子元素,不存在堆疊铡原。
Center
定義如下:
class Center extends Align {
? const Center({ Key key, double widthFactor, double heightFactor, Widget child })
? ? : super(key: key, widthFactor: widthFactor, heightFactor: heightFactor, child: child);
}
Center繼承自Align偷厦,它比Align只少了一個alignment 參數(shù);由于Align的構造函數(shù)中alignment 值為Alignment.center燕刻,所以Center組件其實是對齊方式確定(Alignment.center)了的Align只泼。