flutter好用的輪子推薦三-超強(qiáng)輪播圖Swiper

前言

Flutter是谷歌的移動(dòng)UI框架,可以快速在iOS和Android上構(gòu)建高質(zhì)量的原生用戶(hù)界面娄蔼。

IT界著名的尼古拉斯·高爾包曾說(shuō):輪子是IT進(jìn)步的階梯岁诉!熱門(mén)的框架千篇一律涕癣,好用輪子萬(wàn)里挑一前标!Flutter作為這兩年開(kāi)始崛起的跨平臺(tái)開(kāi)發(fā)框架,其第三方生態(tài)相比其他成熟框架還略有不足只搁,但輪子的數(shù)量也已經(jīng)很多了氢惋。本系列文章挑選日常app開(kāi)發(fā)常用的輪子分享出來(lái)洞翩,給大家提高搬磚效率骚亿,同時(shí)也希望flutter的生態(tài)越來(lái)越完善来屠,輪子越來(lái)越多震鹉。

本系列文章準(zhǔn)備了超過(guò)50個(gè)輪子推薦,工作原因嫂粟,盡量每1-2天出一篇文章墨缘。

tip:本系列文章合適已有部分flutter基礎(chǔ)的開(kāi)發(fā)者,入門(mén)請(qǐng)戳:flutter官網(wǎng)

正文

輪子

  • 輪子名稱(chēng):flutter_swiper
  • 輪子概述:flutter最強(qiáng)大的siwiper, 多種布局方式宽涌,無(wú)限輪播卸亮,Android和IOS雙端適配.
  • 輪子作者:JZoom
  • 推薦指數(shù):★★★★★
  • 常用指數(shù):★★★★★
  • 效果預(yù)覽:


    效果圖

安裝

dependencies:
  flutter_swiper: ^1.1.6
import 'package:flutter_swiper/flutter_swiper.dart';

功能路線(xiàn)

1.x.x 功能實(shí)現(xiàn):

  • 無(wú)限循環(huán)輪播
  • 控制按鈕
  • 分頁(yè)指示器
  • 非無(wú)限循環(huán)模式
  • 單元測(cè)試
  • 例子
  • 滾動(dòng)方向
  • 可定制控制按鈕
  • 可定制分頁(yè)
  • 自動(dòng)播放
  • 控制器
  • 外部分頁(yè)指示器
  • 更多布局方式

用法介紹

通過(guò)widget => new Swiper()構(gòu)建輪播圖控件兼贸,通過(guò)不同的屬性搭配不同的效果:
假設(shè)有一組圖片:

List<String> imgs=[
    'http://xxxx/img1.jpg',
    'http://xxxx/img2.jpg',
    'http://xxxx/img3.jpg',
    'http://xxxx/img4.jpg'
];

默認(rèn)效果

Container(
    height: 250,
    child: new Swiper(
        itemBuilder: (BuildContext context,int index){
            return new Image.network(imgs[index],fit: BoxFit.cover,);
        },
        itemCount: imgs.length,
        pagination: new SwiperPagination(),//如果不填則不顯示指示點(diǎn)
        control: new SwiperControl(),//如果不填則不顯示左右按鈕
    ),
),

3D卡片滾動(dòng)

Container(
    height: 250,
    child: new Swiper(
        itemBuilder: (BuildContext context, int index) {
            return new Image.network(imgs[index],fit: BoxFit.cover,);
        },
        itemCount: imgs.length,
        viewportFraction: 0.8,
        scale: 0.9,
    ),
),

無(wú)限卡片堆疊

Container(
    height: 300,
    child: new Swiper(
        itemBuilder: (BuildContext context, int index) {
            return new Image.network(imgs[index],fit: BoxFit.cover,);
        },
        itemCount: imgs.length,
        itemWidth: 300.0,
        layout: SwiperLayout.STACK,
    ),
),

無(wú)限卡片堆疊2

Container(
    height: 300,
    child: new Swiper(
        itemBuilder: (BuildContext context, int index) {
            return new Image.network(imgs[index],fit: BoxFit.cover,);
        },
        itemCount: imgs.length,
        itemWidth: 300.0,
        itemHeight: 300.0,
        layout: SwiperLayout.TINDER,
    ),
),

自定義效果

Container(
    height: 200,
    child: new Swiper(
    layout: SwiperLayout.CUSTOM,
    customLayoutOption: new CustomLayoutOption(
        startIndex: -1,
        stateCount: 3
    ).addRotate([
        -45.0/180,
        0.0,
        45.0/180
    ]).addTranslate([
        new Offset(-370.0, -40.0),
        new Offset(0.0, 0.0),
        new Offset(370.0, -40.0)
    ]),
    itemWidth: 300.0,
    itemHeight: 200.0,
    itemBuilder: (context, index) {
        return new Image.network(imgs[index],fit: BoxFit.cover,);
    },
    itemCount: imgs.length),
)

構(gòu)建

基本參數(shù)

參數(shù) 默認(rèn)值 描述
scrollDirection Axis.horizontal 滾動(dòng)方向,設(shè)置為Axis.vertical如果需要垂直滾動(dòng)
loop true 無(wú)限輪播模式開(kāi)關(guān)
index 0 初始的時(shí)候下標(biāo)位置
autoplay false 自動(dòng)播放開(kāi)關(guān).
onIndexChanged void onIndexChanged(int index) 當(dāng)用戶(hù)手動(dòng)拖拽或者自動(dòng)播放引起下標(biāo)改變的時(shí)候調(diào)用
onTap void onTap(int index) 當(dāng)用戶(hù)點(diǎn)擊某個(gè)輪播的時(shí)候調(diào)用
duration 300.0 動(dòng)畫(huà)時(shí)間螺垢,單位是毫秒
pagination null 設(shè)置 new SwiperPagination() 展示默認(rèn)分頁(yè)指示器
control null 設(shè)置 new SwiperControl() 展示默認(rèn)分頁(yè)按鈕

分頁(yè)指示器

分頁(yè)指示器繼承自 SwiperPlugin,SwiperPluginSwiper 提供額外的界面.設(shè)置為new SwiperPagination() 展示默認(rèn)分頁(yè).

參數(shù) 默認(rèn)值 描述
alignment Alignment.bottomCenter 如果要將分頁(yè)指示器放到其他位置枉圃,那么可以修改這個(gè)參數(shù)
margin const EdgeInsets.all(10.0) 分頁(yè)指示器與容器邊框的距離
builder SwiperPagination.dots 目前已經(jīng)定義了兩個(gè)默認(rèn)的分頁(yè)指示器樣式: SwiperPagination.dots 孽亲、 SwiperPagination.fraction展父,都可以做進(jìn)一步的自定義.

如果需要定制自己的分頁(yè)指示器,那么可以這樣寫(xiě):

new Swiper(
    ...,
    pagination:new SwiperCustomPagination(
        builder:(BuildContext context, SwiperPluginConfig config){
            return new YourOwnPaginatipon();
        }
    )
);

控制按鈕

控制按鈕組件也是繼承自 SwiperPlugin,設(shè)置 new SwiperControl() 展示默認(rèn)控制按鈕.

參數(shù) 默認(rèn)值 描述
iconPrevious Icons.arrow_back_ios 上一頁(yè)的IconData
iconNext Icons.arrow_forward_ios 下一頁(yè)的IconData
color Theme.of(context).primaryColor 控制按鈕顏色
size 30.0 控制按鈕的大小
padding const EdgeInsets.all(5.0) 控制按鈕與容器的距離

控制器(SwiperController)

SwiperController 用于控制 Swiper的index屬性, 停止和開(kāi)始自動(dòng)播放. 通過(guò) new SwiperController() 創(chuàng)建一個(gè)SwiperController實(shí)例酌呆,并保存搔耕,以便將來(lái)能使用。

方法 描述
void move(int index, {bool animation: true}) 移動(dòng)到指定下標(biāo)菩收,設(shè)置是否播放動(dòng)畫(huà)
void next({bool animation: true}) 下一頁(yè)
void previous({bool animation: true}) 上一頁(yè)
void startAutoplay() 開(kāi)始自動(dòng)播放
void stopAutoplay() 停止自動(dòng)播放

自動(dòng)播放

參數(shù) 默認(rèn)值 描述
autoplayDely 3000 自動(dòng)播放延遲毫秒數(shù).
autoplayDisableOnInteraction true 當(dāng)用戶(hù)拖拽的時(shí)候娜饵,是否停止自動(dòng)播放.

所有的定制選項(xiàng):https://github.com/jzoom/flutter_swiper/blob/master/example/lib/src/ExampleCustom.dart

結(jié)尾

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末箱舞,一起剝皮案震驚了整個(gè)濱河市晴股,隨后出現(xiàn)的幾起案子肺魁,更是在濱河造成了極大的恐慌,老刑警劉巖寂呛,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘾晃,死亡現(xiàn)場(chǎng)離奇詭異酗捌,居然都是意外死亡涌哲,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)哪廓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)初烘,“玉大人分俯,你說(shuō)我怎么就攤上這事哆料。” “怎么了杏节?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵奋渔,是天一觀(guān)的道長(zhǎng)壮啊。 經(jīng)常有香客問(wèn)我,道長(zhǎng)玄渗,這世上最難降的妖魔是什么染突? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任份企,我火速辦了婚禮,結(jié)果婚禮上甜紫,老公的妹妹穿的比我還像新娘骂远。我一直安慰自己,他們只是感情好拓型,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布劣挫。 她就那樣靜靜地躺著东帅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪帐我。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,158評(píng)論 1 308
  • 那天谣光,我揣著相機(jī)與錄音芬为,去河邊找鬼碳柱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛莲镣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播的圆,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼越妈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼钮糖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起店归,我...
    開(kāi)封第一講書(shū)人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤消痛,失蹤者是張志新(化名)和其女友劉穎秩伞,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體展氓,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡怒炸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年阅羹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捏鱼。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡导梆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出递鹉,到底是詐尸還是另有隱情躏结,我是刑警寧澤狰域,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布兆览,位于F島的核電站,受9級(jí)特大地震影響子巾,放射性物質(zhì)發(fā)生泄漏砰左。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一缠导、第九天 我趴在偏房一處隱蔽的房頂上張望僻造。 院中可真熱鬧孩饼,春花似錦髓削、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春宝泵,著一層夾襖步出監(jiān)牢的瞬間好啰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工儿奶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留框往,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓闯捎,卻偏偏與公主長(zhǎng)得像椰弊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秉版,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

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