第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Flutter Wrap & Chip

標(biāo)簽:
Html5

在写业务的时候,难免有搜索功能,一般搜索功能的页面如下:
图片描述
那如果在Android上面写的话,
一般来讲是一个 RecyclerView + 自动换行的 layoutManager + 自定义的background。
当然这个自动换行的LayoutManager 还得自己定义,去算坐标。
那 Flutter 提供给我们很方便的控件 Wrap + Chip,用这两个就能轻松实现上诉效果。
先来说一下Wrap。

Wrap

看名字我们也能看出来,它就是一个包裹住子布局的 Widget,并且可以自动换行。
先看一下构造函数,来确定一下需要传入什么参数:

1.  `Wrap({`
  
2.   `Key key,`
    
3.   `this.direction =  Axis.horizontal,  // 子布局排列方向`
    
4.   `this.alignment =  WrapAlignment.start,  // 子布局对齐方向`
    
5.   `this.spacing =  0.0,  // 间隔`
    
6.   `this.runAlignment =  WrapAlignment.start,  // run 可以理解为新的一行,新的一行的对齐方向`
    
7.   `this.runSpacing =  0.0,  // 两行的间距`
    
8.   `this.crossAxisAlignment =  WrapCrossAlignment.start,`
    
9.   `this.textDirection,`
    
10.   `this.verticalDirection =  VerticalDirection.down,`
    
11.   `List<Widget> children =  const  <Widget>[],`
    
12.  `})  :  super(key: key, children: children);`
    

最基本的我们只需要传入一个children即可,但是我们想要好的效果,一般都会传入 spacing 和 runSpacing。

Chip

下面看一下 Chip,Chip可以理解为碎片的意思,还是先来看一下构造函数:

1.  `Chip({`
    
2.   `Key key,`
    
3.   `this.avatar,//左侧Widget,一般为小图标`
    
4.   `@required  this.label,//标签`
    
5.   `this.labelStyle,`
    
6.   `this.labelPadding,`
    
7.   `this.deleteIcon//删除图标`
    
8.   `this.onDeleted//删除回调,为空时不显示删除图标`
    
9.   `this.deleteIconColor//删除图标的颜色`
    
10.   `this.deleteButtonTooltipMessage//删除按钮的tip文字`
    
11.   `this.shape//形状`
    
12.   `this.clipBehavior =  Clip.none,`
    
13.   `this.backgroundColor//背景颜色`
    
14.   `this.padding,  // padding`
    
15.   `this.materialTapTargetSize//删除图标material点击区域大小`
    
16.   `})`

可以看到这里东西还是不少的,最基本的要传入一个label。
label 一般就为我们的 text,先来看一下只定义一个 label 的效果:
图片描述
下面再加入 avatar:
图片描述
再来加入 delete:
图片描述
这里注意,一定要设置上 onDeleted 参数,否则不显示delete控件。

编写 ‘历史搜索’

前面都是在 children 里添加widget 来达到目的,不好做删除工作。
现在我们来使用 ListView,并添加删除事件。
代码如下:

1.  `import  'package:flutter/material.dart';`
    
2.    
    
3.  `class  WrapPage  extends  StatefulWidget  {`
    
4.   `@override`
    
5.   `_WrapPageState createState()  =>  _WrapPageState();`
    
6.  `}`
    
7.    
    
8.  `class  _WrapPageState  extends  State<WrapPage>  {`
    
9.    
    
10.   `// 生成历史数据`
    
11.   `final  List<String> _list =  List<String>.generate(10,  (i)  =>  'chip$i');`
    
12.    
    
13.   `@override`
    
14.   `Widget build(BuildContext context)  {`
    
15.   `return  Scaffold(`
    
16.   `appBar:  AppBar(`
    
17.   `title:  Text('WrapPage'),`
    
18.   `),`
    
19.   `body:  Wrap(`
    
20.   `spacing:  10,`
    
21.   `runSpacing:  5,`
    
22.   `children: _list.map<Widget>((s)  {`
    
23.   `return  Chip(`
    
24.   `label:  Text('$s'),`
    
25.   `avatar:  Icon(Icons.person),`
    
26.   `deleteIcon:  Icon(`
    
27.   `Icons.close,`
    
28.   `color:  Colors.red,`
    
29.   `),`
    
30.   `onDeleted:  ()  {`
    
31.   `setState(()  {`
    
32.   `_list.remove(s);  // 删除事件`
    
33.   `});`
    
34.   `},`
    
35.   `);`
    
36.   `}).toList()`
    
37.   `));`
    
38.   `}`
    
39.  `}`

效果如下:
图片描述

总结

Flutter 提供给我们很多好用的 widget, 我们只需要组合起来就可以达到我们的目的。

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺(jué)得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
移動(dòng)開(kāi)發(fā)工程師
手記
粉絲
30
獲贊與收藏
45

關(guān)注作者,訂閱最新文章

閱讀免費(fèi)教程

  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫(xiě)下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說(shuō)多少就多少
贊賞金額會(huì)直接到老師賬戶(hù)
支付方式
打開(kāi)微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專(zhuān)欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消