Flutter-Wrap的使用說明

Flutter-Wrap的使用說明

Wrap可以進(jìn)行水平方向或者垂直方向上的布局,在一行或者一列現(xiàn)實(shí)不完所有的widgets的時(shí)候假夺,能夠根據(jù)當(dāng)前寬度或者高度自動換行唤殴。

Wrap的定義

Wrap定義的屬性不多,查看如下:

Wrap({
    Key key,
    this.direction = Axis.horizontal,//設(shè)置水平局部還是垂直布局
    this.alignment = WrapAlignment.start,//設(shè)置元素的其實(shí)位置捐下,
    
    this.spacing = 0.0,//在direction: Axis.horizontal的時(shí)候指左右兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指上下兩個(gè)widget的間距
    this.runAlignment = WrapAlignment.start,//設(shè)置widget與widget在水平或者垂直軸上的間距
    WrapAlignment.start//每一行(列)子Widget在縱(橫)軸上的排列账锹,全部子Widget從頂部開始展示
    WrapAlignment.end//每一行(列)子Widget在縱(橫)軸上的排列,全部子Widget挨著底部展示
    WrapAlignment.center//每一行(列)子Widget在縱(橫)軸上的排列坷襟,全部子widget在中間展示
    WrapAlignment.spaceBetween//每一行(列)子Widget在縱(橫)軸上的排列奸柬,兩兩子widget之間間距相等,最上最下子widget挨著邊展示
    WrapAlignment.spaceAround//每一行(列)子Widget在縱(橫)軸上的排列婴程,兩兩子widget之間間距相等廓奕,最上最下子widget離邊的距離為兩兩子widget之間距離的一半
    WrapAlignment.spaceAround//每一行(列)子Widget在縱(橫)軸上的排列,兩兩子widget之間間距相等档叔,最上最下子widget離邊的距離為兩兩子widget之間距離相等
    this.runSpacing = 0.0,//在direction: Axis.horizontal的時(shí)候指上下兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指左右兩個(gè)widget的間距
    this.crossAxisAlignment = WrapCrossAlignment.start,//水平排列時(shí)控制全部子widgets的上部對齊桌粉,垂直排列時(shí)控制全部子widgets的左邊對齊
    WrapCrossAlignment.end//水平排列時(shí)控制全部子widgets的下部對齊,垂直排列時(shí)控制全部子widgets的又邊對齊
    WrapCrossAlignment.center//設(shè)置每一行的子Widgets劇中對齊
    this.textDirection,//設(shè)置每一行(列)的展示 
    textDirection: TextDirection.ltr//設(shè)置每一行(列)的子Widgets從左到右(從上到下)正常顯示衙四,正序排列
    textDirection: TextDirection.rtl////設(shè)置每一行(列)的子Widgets倒序顯示
    this.verticalDirection = VerticalDirection.down,//設(shè)置行列widgets的展示铃肯,正常顯示
    VerticalDirection.up//倒序展示,比如传蹈,在direction: Axis.horizontal時(shí)有1押逼、2步藕、3行widgets,設(shè)置為up后宴胧,展示為3漱抓、2表锻、1  
    List<Widget> children = const <Widget>[],//一組子widgets
})

Wrap的簡單使用

可以把Wrap當(dāng)作搜索歷史的展示用恕齐,代碼如下:

class WrapDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return  Wrap(
//      direction: Axis.vertical,
    direction: Axis.horizontal,
       spacing: 16.0, //在direction: Axis.horizontal的時(shí)候指左右兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指上下兩個(gè)widget的間距
       runSpacing: 16.0,//在direction: Axis.horizontal的時(shí)候指上下兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指左右兩個(gè)widget的間距
      alignment: WrapAlignment.start,
       crossAxisAlignment: WrapCrossAlignment.start,
       textDirection: TextDirection.ltr,
//       verticalDirection: VerticalDirection.up,
       children: <Widget>[
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
           color: Colors.orange,
             child: Text('歷史記錄1'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.redAccent,
             child: Text('歷史記錄2'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.blue,
             child: Text('歷史記錄3'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.greenAccent,
             child: Text('歷史記錄4'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.amber,
             child: Text('歷史記錄5'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.indigoAccent,
             child: Text('歷史記錄6'),
           ),
         ),
       ],
     );
  }
}

這里模擬有6條搜索歷史記錄,依次進(jìn)行排列瞬逊;運(yùn)行起來展示效果如下:


wrap_history.jpg

wrap的verticalDirection和textDirection的詳細(xì)說明使用

wrap的verticalDirection和textDirection的詳細(xì)說明使用1显歧、

現(xiàn)在先看一組正常的展示,也就是說:

textDirection: TextDirection.ltr,

verticalDirection: VerticalDirection.down,

代碼如下:

class WrapDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return  Wrap(
//      direction: Axis.vertical,
    direction: Axis.horizontal,
       spacing: 16.0, //在direction: Axis.horizontal的時(shí)候指左右兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指上下兩個(gè)widget的間距
       runSpacing: 16.0,//在direction: Axis.horizontal的時(shí)候指上下兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指左右兩個(gè)widget的間距
      alignment: WrapAlignment.spaceEvenly,
       crossAxisAlignment: WrapCrossAlignment.end,
       textDirection: TextDirection.ltr,
       verticalDirection: VerticalDirection.down,
       children: <Widget>[
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 360.0,
           color: Colors.orange,
             child: Text('歷史記錄1'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 106.0,
             height: 36.0,
             color: Colors.redAccent,
             child: Text('歷史記錄2'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 360.0,
             color: Colors.blue,
             child: Text('歷史記錄3'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 106.0,
             height: 36.0,
             color: Colors.greenAccent,
             child: Text('歷史記錄4'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.amber,
             child: Text('歷史記錄5'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 106.0,
             height: 36.0,
             color: Colors.indigoAccent,
             child: Text('歷史記錄6'),
           ),
         ),
       ],
     );
  }
}

運(yùn)行效果确镊,可以看出士骤,每一行的widgets都是從左到右正常序列展示的


wrap_normal.jpg
wrap的verticalDirection和textDirection的詳細(xì)說明使用2、

現(xiàn)在設(shè)置倒序展示的wrap中子widgets

textDirection: TextDirection.rtl,

verticalDirection: VerticalDirection.up,

演示代碼:

class WrapDemo extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return  Wrap(
//      direction: Axis.vertical,
    direction: Axis.horizontal,
       spacing: 16.0, //在direction: Axis.horizontal的時(shí)候指左右兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指上下兩個(gè)widget的間距
       runSpacing: 16.0,//在direction: Axis.horizontal的時(shí)候指上下兩個(gè)Widget的間距,在direction: Axis.vertical的時(shí)候指左右兩個(gè)widget的間距
      alignment: WrapAlignment.spaceEvenly,
       crossAxisAlignment: WrapCrossAlignment.end,
       textDirection: TextDirection.rtl,
       verticalDirection: VerticalDirection.up,
       children: <Widget>[
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 360.0,
           color: Colors.orange,
             child: Text('歷史記錄1'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 106.0,
             height: 36.0,
             color: Colors.redAccent,
             child: Text('歷史記錄2'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 360.0,
             color: Colors.blue,
             child: Text('歷史記錄3'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 106.0,
             height: 36.0,
             color: Colors.greenAccent,
             child: Text('歷史記錄4'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 86.0,
             height: 36.0,
             color: Colors.amber,
             child: Text('歷史記錄5'),
           ),
         ),
         ClipRRect(
           borderRadius: BorderRadius.circular(10.0),
           child: Container(
             alignment: Alignment.center,
             width: 106.0,
             height: 36.0,
             color: Colors.indigoAccent,
             child: Text('歷史記錄6'),
           ),
         ),
       ],
     );
  }
}

對于上面的代碼蕾域,僅做了很小的改動拷肌,運(yùn)行展示效果如下:


wrap_notNormal.jpg

從運(yùn)行效果上可以看出:

textDirection: TextDirection.rtl,控制著每一行的widgets的倒序排列,

verticalDirection: VerticalDirection.up,控制著以行為單位的widgets的倒序展示旨巷。

備注:在后續(xù)的使用過程中巨缘,請根據(jù)實(shí)際場景使用Wrap這個(gè)Widget。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末采呐,一起剝皮案震驚了整個(gè)濱河市若锁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌斧吐,老刑警劉巖又固,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異煤率,居然都是意外死亡仰冠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門蝶糯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洋只,“玉大人,你說我怎么就攤上這事裳涛∧菊牛” “怎么了?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵端三,是天一觀的道長舷礼。 經(jīng)常有香客問我,道長郊闯,這世上最難降的妖魔是什么妻献? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任蛛株,我火速辦了婚禮,結(jié)果婚禮上育拨,老公的妹妹穿的比我還像新娘谨履。我一直安慰自己,他們只是感情好熬丧,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布笋粟。 她就那樣靜靜地躺著,像睡著了一般析蝴。 火紅的嫁衣襯著肌膚如雪害捕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天闷畸,我揣著相機(jī)與錄音尝盼,去河邊找鬼。 笑死佑菩,一個(gè)胖子當(dāng)著我的面吹牛盾沫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殿漠,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼赴精,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凸舵?” 一聲冷哼從身側(cè)響起祖娘,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎啊奄,沒想到半個(gè)月后渐苏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡菇夸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年琼富,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庄新。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鞠眉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出择诈,到底是詐尸還是另有隱情械蹋,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布羞芍,位于F島的核電站哗戈,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏荷科。R本人自食惡果不足惜唯咬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一纱注、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧胆胰,春花似錦狞贱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至勉盅,卻和暖如春佑颇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背草娜。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留痒筒,地道東北人宰闰。 一個(gè)月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像簿透,于是被迫代替她去往敵國和親移袍。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

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