使用 flutter_swiper 輪播庫(kù)。
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有平安免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
使用 AspectRatio 結(jié)合實(shí)現(xiàn)效果,設(shè)置對(duì)應(yīng)的比例。
在本博客中,我們將探討Flutter中的堆疊式卡輪播。 我們還將實(shí)現(xiàn)一個(gè)演示程序,并學(xué)習(xí)在您的flutter應(yīng)用程序中使用 stacked_card_carousel 包創(chuàng)建一個(gè)帶有垂直輪播的堆疊卡。
用于創(chuàng)建帶有堆疊卡片的垂直輪播的小部件。 下面的演示視頻顯示了如何在Flutter中創(chuàng)建帶有垂直旋轉(zhuǎn)木馬的堆疊卡。 它顯示了在您的flutter應(yīng)用程序中如何使用stacked_card_carousel軟件包來(lái)使用堆疊式卡輪播。 它顯示了垂直圓盤(pán)傳送帶滑動(dòng)卡的列表,所有卡向上滑動(dòng)并堆疊,稱(chēng)為堆疊式卡傳送帶。 它會(huì)顯示在您的設(shè)備上。
堆疊式卡輪播的一些屬性是:
在lib文件夾中創(chuàng)建一個(gè)名為style_card.dart的新dart文件。
首先,我們創(chuàng)建StyleCard類(lèi),將在后續(xù)的DEMO中調(diào)用它
我們將制作一個(gè) card 控件. 在card控件中, 我們加入一個(gè)elevation 屬性和一個(gè)column控件。 在column中, 我們加入一個(gè)container用于包含image, title 和 description. 然后在stacked_card_demo頁(yè)面中使用它。
在lib文件夾中創(chuàng)建一個(gè)新的名為stacked_card_demo.dart的dart文件。
現(xiàn)在,我們將創(chuàng)建一個(gè)styleCards列表,并在其中添加一個(gè)StyleCard類(lèi)。
我們創(chuàng)建了八個(gè)卡片控件,并在其中添加了image,title和description。 程序運(yùn)行后,我們將看到一個(gè)卡片列表, 當(dāng)用戶向上滑動(dòng)時(shí),所有卡片都將堆疊在一起; 當(dāng)用戶向下滑動(dòng)時(shí),卡片都將回到原始位置;
效果如下:
Demo地址:
NotificationListener 可以監(jiān)聽(tīng) PageView 的改變,比如滑動(dòng)的距離,頁(yè)面索引等,目前只使用的了索引。里面的一些方法挺有用的。
使用 AnimatedContainer 組件保證切換以后會(huì)有流程的過(guò)渡效果,表現(xiàn)的會(huì)平滑一些。
首先,返回?cái)?shù)據(jù)需要包含圖片的寬高信息,就像這樣:
如果返回的只有圖片信息沒(méi)有寬高數(shù)據(jù)可以使用以下方法去獲得圖片的信息,這樣也可以得到圖片的寬高信息,不太建議,還是直接叫后端給,我們也方便處理,要是后端說(shuō)他們給不了就拿上磚頭去叫他們加,就想偷懶。
自適應(yīng)輪播圖的高度我們需要原始圖片的寬高比,或者知道原始圖的寬高。顯示的時(shí)候按照原始的寬高比進(jìn)行等比例縮放。
_controller.page 獲取到的是一個(gè)浮點(diǎn)數(shù),類(lèi)似 1.0325441 ,使用 round 四舍五入出現(xiàn)的效果就是我們拖到一半或以上就可以得到下一個(gè) activeIndex , activeIndex 是一個(gè)整數(shù)。
我們動(dòng)態(tài)獲取了圖片的寬度以后放入 AnimatedContainer 就可以有過(guò)渡效果,真機(jī)和模擬器測(cè)試都很流暢,可以已60幀渲染。
現(xiàn)在的小目標(biāo)是要實(shí)現(xiàn)一個(gè) 「圖片輪播」的效果,我們?cè)?Android 中可以使用 ViewPager 結(jié)合 handler 或者 Timer 去實(shí)現(xiàn)。
而我們?cè)? Flutter 中,其實(shí)也是類(lèi)似的。
那么,在 Flutter 中,代替 Android 中的 ViewPager 組件是 PageView ,而且,這個(gè) PageView 相比 ViewPager 擴(kuò)展性更高。
我們來(lái)看一下
Flutter PageView 官網(wǎng)
根據(jù)官網(wǎng)的介紹, PageView 在需要展示的頁(yè)面很多時(shí),有「控件復(fù)用」功能,而且,我們還可以通過(guò)
來(lái)設(shè)置滾動(dòng)的方向,也就是說(shuō),我們還可以完成「縱向滾動(dòng)」,真的很棒有么有?
偷的小米官網(wǎng)的輪播圖
看一下效果圖
GestureDetector ,或者直接返回一個(gè) button 類(lèi)型的 Widget 即可
ok,了解了這個(gè)PageView,接下來(lái),我們想法子搞一個(gè)「輪播效果」,請(qǐng)見(jiàn)下一篇文章。
先制作一個(gè)縱軸滾動(dòng)的pageview
然后我們利用time組件實(shí)現(xiàn)自動(dòng)輪播,這里面有個(gè)小技巧,掌握了這個(gè)小技巧就可以做無(wú)縫的循環(huán)播放,比如我有 a b c三項(xiàng),我們?cè)跇?gòu)造pageview item的時(shí)候人為的構(gòu)造成a b c a,在c的后面加上a,當(dāng)c滾動(dòng)到a的時(shí)候,比如每次動(dòng)畫(huà)變換時(shí)間是500毫秒,那么就延遲500好秒快速的跳到第一個(gè)a頁(yè)面,剛好等它滾動(dòng)完就快速變換
在視覺(jué)上完全看不出來(lái),這樣就造成了無(wú)縫循環(huán)滾動(dòng)的假象,同理如果你想反方向也可以無(wú)縫循環(huán)滾動(dòng),那么你在構(gòu)造pageview item的時(shí)候就可以 這樣c a b c a構(gòu)造,只要控制好邏輯,完全沒(méi)有任何問(wèn)題
小菜在業(yè)務(wù)開(kāi)發(fā)過(guò)程中會(huì)自定義 Slider 滑動(dòng)條,而在自定義之前,小菜先簡(jiǎn)單了解一下 Flutter 自帶的 Slider ;
簡(jiǎn)單分析源碼可得, Slider 是一個(gè)有狀態(tài)的 StatefulWidget 組件,屬性也很清晰易懂,其中滑動(dòng)過(guò)程中對(duì)應(yīng)的 value 值和 onChanged 回調(diào)是必須參數(shù);
value 未滑動(dòng)過(guò)程中對(duì)應(yīng)的值,在 min 和 max 之間; onChanged 是在滑動(dòng)過(guò)程中回調(diào),當(dāng) onChanged 為 null 或 value 所在的 min 和 max 集合范圍為空時(shí), Slider 禁止滑動(dòng);
min 和 max 為滑動(dòng)條范圍,而 value 的取值范圍是在 min 和 max 之間,無(wú)論 value 為正還是負(fù),均需要在 min 和 max 之間;
activeColor 為滑動(dòng)條已滑動(dòng)過(guò)的顏色; inactiveColor 為滑動(dòng)條中未滑動(dòng)的顏色;兩者均可以在 SliderTheme 中設(shè)置;
label 為滑動(dòng)條滑動(dòng)到某一節(jié)點(diǎn)的標(biāo)簽文案; divisions 是把 min 和 max 等分為 divisions 份數(shù);只有在 divisions 生效時(shí), label 才會(huì)展示;
onChangeStart 和 onChangeEnd 分別對(duì)應(yīng)滑動(dòng)過(guò)程中 value 值何時(shí)開(kāi)始更改或何時(shí)完成更改時(shí)對(duì)應(yīng)的回調(diào);
Slider 的主題效果可以通過(guò) SliderTheme 或 ThemeData.sliderTheme 中獲取更新,相較于 Slider 只提供已滑動(dòng)和未滑動(dòng)顏色效果,屬性粒度更細(xì);
activeTrackColor 和 inactiveTrackColor 分別對(duì)應(yīng) Slider 已滑動(dòng)過(guò)和未滑動(dòng)過(guò)的軌道顏色;
thumbColor 對(duì)應(yīng)滑動(dòng)按鈕顏色,而 overlayColor 對(duì)應(yīng)滑動(dòng)按鈕映射的疊層顏色,通常設(shè)置為半透明狀態(tài); overlayShape 對(duì)應(yīng)疊層樣式;
valueIndicatorColor 對(duì)應(yīng) label 氣泡顏色; valueIndicatorShape 對(duì)應(yīng)氣泡內(nèi)文字屬性; valueIndicatorShape 對(duì)應(yīng)氣泡樣式,可以再此進(jìn)行自定義氣泡;
activeTickMarkColor 對(duì)應(yīng)已選中刻度顏色; inactiveTickMarkColor 對(duì)應(yīng)未選中刻度顏色; tickMarkShape 對(duì)應(yīng)刻度樣式;
trackHeight 為 Slider 軌道高度; trackShape 對(duì)應(yīng)軌道樣式,主要再此處進(jìn)行自定義樣式;
對(duì)于不可滑動(dòng)狀態(tài), SliderThemeData 提供了對(duì)應(yīng)屬性;
Slider 案例源碼
小菜本節(jié)暫未涉及自定義滑動(dòng)條樣式,對(duì)于底層的 Slider 了解還不夠深入;如有錯(cuò)誤,請(qǐng)多多指導(dǎo)!
文章題目:flutter輪播圖解,flutter廣播
網(wǎng)頁(yè)網(wǎng)址:http://chinadenli.net/article24/dseodce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷(xiāo)推廣、響應(yīng)式網(wǎng)站、網(wǎng)站維護(hù)、軟件開(kāi)發(fā)、python、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)