【Flutter 2-10】Flutter手把手教程UI布局和Widget——流式布局Wrap

作者 | 弗拉德
來(lái)源 | 弗拉德(公眾號(hào):fulade_me)

Wrap

FlutterWrap是流式布局控件,RowColumn在布局上是很好用,但是有一個(gè)缺點(diǎn),如果當(dāng)子控件數(shù)量過(guò)多導(dǎo)致RowColumn裝載不下的時(shí)候,就會(huì)出現(xiàn)UI頁(yè)面上的錯(cuò)誤。Wrap可以完美的避免這個(gè)問(wèn)題,當(dāng)控件過(guò)多一行顯示不全的時(shí)候,Wrap可以換行顯示。

當(dāng)然WrapRowColumn有著很多相似的地方。
我們先來(lái)看Wrap的構(gòu)造函數(shù):

Wrap({
    // Key
    Key key,
    // 子控件顯示方向, 有垂直方向 水平方向兩個(gè)值
    this.direction = Axis.horizontal,
    /// 子控件的 布局方式  跟Column的 mainAxisalignment類(lèi)似 
    this.alignment = WrapAlignment.start,
    /// 子控件 主軸方向間距
    this.spacing = 0.0,
    /// 子控件 交叉方向的 布局方式
    this.runAlignment = WrapAlignment.start,
    /// 子控件 交叉方向間距
    this.runSpacing = 0.0,
    /// 交叉軸的對(duì)齊方式 與 Column 的crossAxisAlignment 一樣
    this.crossAxisAlignment = WrapCrossAlignment.start,
    /// 書(shū)寫(xiě)方向 與 Column的 textDirection 一樣
    this.textDirection,
    /// Wrap交叉軸方向上子控件的布局方向
    this.verticalDirection = VerticalDirection.down,
    /// 裁剪方式
    this.clipBehavior = Clip.hardEdge,
    /// 子控件
    List<Widget> children = const <Widget>[],
}) 

下面我們就來(lái)看看這些參數(shù)

direction

direction有兩個(gè)參數(shù)值Axis.horizontalAxis.vertical,很明顯它管理著Wrap的是水平布局還是垂直布局。
Axis.horizontal表示子控件按水平方向布局,Axis.vertical表示子控件按垂直方向布局顯示。

Axis.horizontal
效果如下:

20202_01_15_wrap_horizontal

Axis.vertical
效果如下:

20202_01_15_wrap_vertical

alignment

alignment接收一個(gè)WrapAlignment類(lèi)型的枚舉,WrapAlignment共有六個(gè)枚舉值,如下:

WrapAlignment的枚舉值與效果與 ColumnmainAxisAlignment效果一樣,想了解的可以看之前的文章

枚舉值 描述
start 與 開(kāi)始的位置對(duì)齊
end 與 結(jié)束的位置對(duì)齊
center 居中對(duì)齊
spaceBetween 把剩余的空間拆分成n-1份(n是子控件的個(gè)數(shù)) 每一份都插入到子控件之間
spaceEvenly 把剩余的空間拆分成n+1份(n是子控件的個(gè)數(shù)) 然后均勻分布
spaceAround 把剩余空間拆分成 2n 份(n是子控件的個(gè)數(shù)) 每個(gè)子控件上下各放一份

WrapAlignment.start

20202_01_15_wrap_alignment_start

WrapAlignment.center

20202_01_15_wrap_alignment_center

WrapAlignment.end

20202_01_15_wrap_alignment_end

WrapAlignment.spaceBetween

20202_01_15_wrap_alignment_between

WrapAlignment.spaceEvenly

20202_01_15_wrap_alignment_spaceEvenly

WrapAlignment.spaceAround

20202_01_15_wrap_alignment_spaceAround

runAlignment

runAlignment接收一個(gè)WrapAlignment類(lèi)型的枚舉,WrapAlignment共有六個(gè)枚舉值(跟alignment的枚舉值是一樣的),runAlignment控制是的是Wrap布局交叉方向的對(duì)齊方式。
如果Wrap的是水平方向布局,runAlignment控制的就是Wrap垂直方向的對(duì)齊方式。

verticalDirection

verticalDirection有兩個(gè)值VerticalDirection.downVerticalDirection.up,表示從哪個(gè)方向開(kāi)始布局。
VerticalDirection.down

2021_01_15_wrap_down

VerticalDirection.up

2021_01_15_wrap_up

注意 當(dāng)設(shè)置為VerticalDirection.up的時(shí)候,第一個(gè)控件也就是Number 0是從最低端最左側(cè)開(kāi)始的。

spacing 和 runSpacing

spacing表示子控件主軸方向間距,runSpacing子控件在交叉方向間距。
在一個(gè)水平方向布局的Wrap為中,spacing表示的就是水平方向子控件之間的間距,runSpacing表示的就是子控件在垂直方向上的間距。

space
space等于10的樣子

2021_01_15_wrap_space_10

space等于40的樣子

2021_01_15_wrap_space_40

runSpacing
runSpacing等于10的樣子
2021_01_15_wrap_runSpace_10

runSpacing等于40的樣子

2021_01_15_wrap_runSpace_40

想體驗(yàn)以上示例的運(yùn)行效果,可以到我的Github倉(cāng)庫(kù)項(xiàng)目flutter_app->lib->routes->wrap_page.dart查看,并且可以下載下來(lái)運(yùn)行并體驗(yàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容