最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用flutter實(shí)現(xiàn)炫酷的list

 更新時(shí)間:2019年06月14日 09:48:02   作者:小華堅(jiān)決上王者  
這篇文章主要給大家介紹了關(guān)于利用flutter實(shí)現(xiàn)炫酷的list的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

使用了flutter一段時(shí)間,越來越喜歡flutter了,flutter比我們想象中的強(qiáng)大。這篇文章介紹了怎么使用flutter來展示一個(gè)很漂亮的list,先看下效果圖。

樣式還是很漂亮的,下面我們一步一步完成這個(gè)小項(xiàng)目。

開發(fā)前準(zhǔn)備

我們會(huì)用到加載網(wǎng)絡(luò)圖片F(xiàn)adeInImage這么個(gè)widget,需要一個(gè)loading的icon,所以需要在pubspec.yaml里配置下靜態(tài)資源,只有配置過的靜態(tài)資源才可以在項(xiàng)目中使用

assets:
 - assets/images/

需要mock一些假數(shù)據(jù)和一些常用的常量,所以專門建了個(gè)constant.dart來管理

assets:
 - assets/images/

appBar部分

appBar需要透明的背景這樣才能將后面的圖片展示出來,看起來很像沉浸式。

需要將elevations設(shè)置為0,這樣就可以取消安卓特有的陰影效果,下面是代碼:

Scaffold(
 appBar: AppBar(
 backgroundColor: Colors.transparent,
 elevation: 0,
 title: Text(
 'flutter awesome list',
 style: TextStyle(
 color: Colors.white,
 ),
 ),
 ),
 body: HomeBody(),
);

Banner部分

我們需要使用Transform.translate()這個(gè)weidget來將Banner部分向上移動(dòng),讓appBar全部展示在banner上面,這里給的offset為offset: Offset(0, -56) ,56為appBar的高度

下面的斜切造型需要使用ClipPath()來完成,用法有點(diǎn)像canvas,代碼如下:

class MyClipper extends CustomClipper<Path> {
 @override
 Path getClip(Size size) {
 Path p = Path();
 p.lineTo(size.width, 0.0);
 p.lineTo(size.width, size.height / 4.75);
 p.lineTo(0.0, size.height / 3.75);
 p.close();
 return p;
 }

 @override
 bool shouldReclip(CustomClipper oldClipper) {
 return true;
 }
}

用戶信息的展示用的widget是ListTile和CircleAvatar,用法也比較簡(jiǎn)單,我直接貼代碼了:

ListTile(
 leading: CircleAvatar(
 backgroundImage: NetworkImage(CONSTANT.userAvatar),
 ),
 title: Text(
 CONSTANT.userName,
 style: CONSTANT.defaultTextStyle,
 textScaleFactor: 1.5,
 ),
 subtitle: Text(
 CONSTANT.userProfile,
 style: CONSTANT.defaultTextStyle,
 ),
)

列表展示部分

列表的展示使用的是ListView.builder() ,兩個(gè)必傳參數(shù)itemCount和itemBuilder,前者控制列表的數(shù)量,后者控制item的展示,因?yàn)閕tem的樣式還是比較多的,所以抽離成單獨(dú)的StatelessWidget組件:AwesomeListItem

我們用InkWell組件將AwesomeListItem包裹,InkWell是flutter自帶的組件,這個(gè)組件的特點(diǎn)是點(diǎn)擊的時(shí)候帶有水墨綻開的效果。點(diǎn)擊item的時(shí)候,我們使用Navigator.push跳轉(zhuǎn)到詳情頁面

圖片的展示,我們還是使用的FadeInImage,這種漸入效果的用戶體驗(yàn)還是很不錯(cuò)的。然后再使用Hero()來包裹FadeInImage,這樣能在頁面跳轉(zhuǎn)的時(shí)候提供圖片之間的過渡動(dòng)畫,很是強(qiáng)大和炫酷

Hero(
 tag: index,
 child: FadeInImage(
 image: NetworkImage(data.image),
 fit: BoxFit.cover,
 placeholder: AssetImage('assets/images/loading.gif'),
 ),
)

詳情頁面

最后就是詳情頁面的展示,這個(gè)頁面并沒有寫什么樣式,展示了從列表頁跳轉(zhuǎn)過來時(shí),圖片的過渡效果,有興趣的同學(xué)可以豐富下頁面的樣式和內(nèi)容

感興趣的同學(xué)可以看下源碼xch1029/awesomelist

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

麟游县| 牟定县| 明水县| 甘肃省| 承德市| 喜德县| 合作市| 佛冈县| 大石桥市| 平定县| 柘城县| 汨罗市| 莱西市| 龙岩市| 三明市| 常州市| 舒城县| 扎鲁特旗| 邳州市| 通城县| 和静县| 綦江县| 六枝特区| 涞水县| 孙吴县| 徐州市| 海宁市| 高州市| 吉木乃县| 佛山市| 泽普县| 天津市| 巴楚县| 无极县| 慈利县| 田阳县| 湖南省| 苗栗市| 高淳县| 海丰县| 罗山县|