Flutter搞定寬高不統(tǒng)一布局開發(fā)的方法詳解
前言
我們?cè)陂_發(fā)移動(dòng)端界面的時(shí)候,經(jīng)常會(huì)遇到一組尺寸不一的組件需要作為同一組展示,典型的就是下面這種搜索歷史。搜索內(nèi)容的文字長短不一,導(dǎo)致顯示的寬度不一致。而且,需要根據(jù)屏幕的寬度來自動(dòng)換行顯示。這個(gè)時(shí)候,用行布局或者網(wǎng)格布局都滿足不了要求,那怎么辦呢?其實(shí) Flutter 為我們提供了很好的組件,那就是Wrap組件。

Wrap 組件簡介
Wrap組件是一種動(dòng)態(tài)布局組件,非常適用于需要?jiǎng)討B(tài)調(diào)整子組件布局的場景,當(dāng)子組件的總寬度或高度超過父容器的寬度或高度時(shí),它會(huì)自動(dòng)將子組件放置到新的行或列中。Wrap組件的定義如下:
Wrap({
Key? key,
this.direction = Axis.horizontal,
this.alignment = WrapAlignment.start,
this.spacing = 0.0,
this.runAlignment = WrapAlignment.start,
this.runSpacing = 0.0,
this.crossAxisAlignment = WrapCrossAlignment.start,
this.textDirection,
this.verticalDirection = VerticalDirection.down,
this.clipBehavior = Clip.none,
List<Widget> children = const <Widget>[],
})其中關(guān)鍵參數(shù)如下:
direction:布局方向,默認(rèn)橫向,即橫向擺不下的時(shí)候會(huì)另起一行;如果更改為縱向(vertical),那么會(huì)按縱向排布,縱向排不下的時(shí)候會(huì)另起一列。通常橫向布局會(huì)多一點(diǎn)。alignment:主軸對(duì)齊方式,默認(rèn)是start,橫向來說是左對(duì)齊。也可以設(shè)置為右對(duì)齊(end),或居中(center).spacing:橫軸方向的間距大小。runSpacing:縱軸方向的間距大小。verticalDirection:換行或換列的方向,默認(rèn)是往下,如果改成向上(up),那么超出后會(huì)往上(橫向)另起一行,也就是從底部往上換行。這種其實(shí)比較少見。children:也就是要子組件,通常會(huì)配合Chip、InputChip這樣的組件使用,其實(shí)任何組件都可以,比如圖片,按鈕都沒問題。
Wrap 使用示例
我們這里使用 Wrap 組件包裹了 Chip 組件和圖片組件,代碼如下。
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.grey[50],
appBar:
AppBar(title: const Text('Wrap'), backgroundColor: Colors.red[400]!),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Wrap(
direction: Axis.horizontal,
spacing: 8.0,
alignment: WrapAlignment.start,
verticalDirection: VerticalDirection.down,
children: List.generate(
_tagsLists.length,
(index) => Chip(
label: Text(_tagsLists[index]),
backgroundColor: Colors.grey[300],
labelStyle: const TextStyle(color: Colors.black87),
),
),
),
const SizedBox(
height: 20.0,
),
Wrap(
spacing: 8.0,
runSpacing: 8.0,
children: List.generate(
_imagesLists.length,
(index) => Container(
width: 120,
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8.0),
image: DecorationImage(
image: AssetImage(_imagesLists[index]),
fit: BoxFit.cover,
),
),
),
),
)
],
),
),
);
}實(shí)現(xiàn)的效果如下圖所示??梢钥吹?,完全可以滿足搜索頁或者是詳情頁的標(biāo)簽布局使用。而且,如果是數(shù)量有限的圖片、按鈕這類的,也可以使用 Wrap 來替代GridView組件。

總結(jié)
本篇介紹了 Wrap 組件的定義和使用,如果有遇到子組件的尺寸不統(tǒng)一(通常會(huì)是橫向的寬度,縱向的高度),那么優(yōu)先建議使用 Wrap 組件來實(shí)現(xiàn)。典型的應(yīng)用場景就是歷史搜索、標(biāo)簽顯示等等。而且,如果是數(shù)量有限的網(wǎng)格式的布局(比如相關(guān)商品推薦),其實(shí)也可以用 Wrap 組件來替換 GridView 組件。本篇源碼已上傳至:實(shí)用組件相關(guān)代碼。
到此這篇關(guān)于Flutter搞定寬高不統(tǒng)一布局開發(fā)的方法詳解的文章就介紹到這了,更多相關(guān)Flutter布局內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
AndroidStudio利用android-support-multidex解決64k的各種異常
這篇文章主要為大家詳細(xì)介紹了AndroidStudio利用android-support-multidex解決64k的各種異常,感興趣的小伙伴們可以參考一下2016-09-09
android使用ViewPager組件實(shí)現(xiàn)app引導(dǎo)查看頁面
這篇文章主要為大家詳細(xì)介紹了android使用ViewPager組件實(shí)現(xiàn)app引導(dǎo)查看頁面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
使用RoundedBitmapDrawable生成圓角圖片的方法
由于RoundedBitmapDrawable類沒有直接提供生成圓形圖片的方法,所以生成圓形圖片首先需要對(duì)原始圖片進(jìn)行裁剪,將圖片裁剪成正方形,最后再生成圓形圖片,具體實(shí)現(xiàn)方法,可以參考下本文2016-09-09
Android系統(tǒng)優(yōu)化Ninja加快編譯
這篇文章主要為大家介紹了Android系統(tǒng)優(yōu)化使用Ninja加快編譯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Android TCP 文件客戶端與服務(wù)器DEMO介紹
首先是服務(wù)器,服務(wù)器是在PC機(jī)上,JAVA運(yùn)行環(huán)境,主要參考網(wǎng)上的代碼,自己做了支持多線程處理,代碼如下所示。需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-11-11
Android使用listview實(shí)現(xiàn)分頁刷新(線程休眠模擬)
這篇文章主要為大家詳細(xì)介紹了Android使用listview實(shí)現(xiàn)分頁刷新,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Android png透明圖片轉(zhuǎn)jpg時(shí)背景變黑的解決方法
這篇文章主要介紹了Android png透明圖片轉(zhuǎn)jpg時(shí)背景變黑的解決方法,需要的朋友可以參考下2017-12-12

