上一篇介紹Banner的開發(fā)。在大多數(shù)應(yīng)用場景中。banner和ListView通常是一起顯示的。 并且能夠共同滑動。例如如下界面:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了湘橋免費建站歡迎大家使用!
要實現(xiàn)上圖的界面,直接想到是ListView添加Header。但在Flutter中,ListView 組件相當(dāng)于RecyclerView,所以添加Header也用RecyclerView的原理:
封裝ListPage組件,list_page.dart
使用及測試:異步加載網(wǎng)絡(luò)數(shù)據(jù)使用
Row:在水平方向上排列子widget的列表。
Column:在垂直方向上排列子widget的列表。
注意:這兩個屬于多子節(jié)點空間,可以將children排列成一行/一列,但是自身不帶滾動屬性,如果超出了一行,在debug下面則會顯示溢出的提示。
MainAxisAlignment:主軸方向上的對齊方式,會對child的位置起作用,默認是start。
其中MainAxisAlignment枚舉值:
center:將children放置在主軸的中心;
end:將children放置在主軸的末尾;
spaceAround:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等,但是首尾child的空白區(qū)域為1/2;
spaceBetween:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等,首尾child都靠近首尾,沒有間隙;
spaceEvenly:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等,包括首尾child;
start:將children放置在主軸的起點;
其中spaceAround、spaceBetween以及spaceEvenly的區(qū)別,就是對待首尾child的方式。其距離首尾的距離分別是空白區(qū)域的1/2、0、1。
MainAxisSize:在主軸方向占有空間的值,默認是max。
MainAxisSize的取值有兩種:
max:根據(jù)傳入的布局約束條件,最大化主軸方向的可用空間;
min:與max相反,是最小化主軸方向的可用空間;
CrossAxisAlignment:children在交叉軸方向的對齊方式,與MainAxisAlignment略有不同。
CrossAxisAlignment枚舉值有如下幾種:
baseline:在交叉軸方向,使得children的baseline對齊;
center:children在交叉軸上居中展示;
end:children在交叉軸上末尾展示;
start:children在交叉軸上起點處展示;
stretch:讓children填滿交叉軸方向;
TextDirection:阿拉伯語系的兼容設(shè)置,一般無需處理。
VerticalDirection:定義了children擺放順序,默認是down。
VerticalDirection枚舉值有兩種:
down:從top到bottom進行布局;
up:從bottom到top進行布局。
top對應(yīng)Row以及Column的話,就是左邊和頂部,bottom的話,則是右邊和底部。
TextBaseline:使用的TextBaseline的方式,有兩種,前面已經(jīng)介紹過。
這個是Row/Column的內(nèi)的小控件,可以用來實現(xiàn)權(quán)重的布局
這邊使用一個Container,里面是Row,使用Expanded對子節(jié)點進行權(quán)重處理,如果不使用Expanded,直接放入其他控件也是可以的,只是無法設(shè)置權(quán)重
對于內(nèi)容過長的時候,會有溢出提示:
MainAxisAlignment.center:將children放置在主軸的中心;
MainAxisAlignment.start:將children放置在主軸的起點;
MainAxisAlignment.end:將children放置在主軸的末尾;
MainAxisAlignment.spaceAround:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等,但是首尾child的空白區(qū)域為1/2;
MainAxisAlignment.spaceBetween:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等,首尾child都靠近首尾,沒有間隙;
MainAxisAlignment.spaceEvenly:將主軸方向上的空白區(qū)域均分,使得children之間的空白區(qū)域相等,包括首尾child;
下一章我們學(xué)習(xí)基礎(chǔ)組件之Image
在本博客中,我們將探討Flutter中的堆疊式卡輪播。 我們還將實現(xiàn)一個演示程序,并學(xué)習(xí)在您的flutter應(yīng)用程序中使用 stacked_card_carousel 包創(chuàng)建一個帶有垂直輪播的堆疊卡。
用于創(chuàng)建帶有堆疊卡片的垂直輪播的小部件。 下面的演示視頻顯示了如何在Flutter中創(chuàng)建帶有垂直旋轉(zhuǎn)木馬的堆疊卡。 它顯示了在您的flutter應(yīng)用程序中如何使用stacked_card_carousel軟件包來使用堆疊式卡輪播。 它顯示了垂直圓盤傳送帶滑動卡的列表,所有卡向上滑動并堆疊,稱為堆疊式卡傳送帶。 它會顯示在您的設(shè)備上。
堆疊式卡輪播的一些屬性是:
在lib文件夾中創(chuàng)建一個名為style_card.dart的新dart文件。
首先,我們創(chuàng)建StyleCard類,將在后續(xù)的DEMO中調(diào)用它
我們將制作一個 card 控件. 在card控件中, 我們加入一個elevation 屬性和一個column控件。 在column中, 我們加入一個container用于包含image, title 和 description. 然后在stacked_card_demo頁面中使用它。
在lib文件夾中創(chuàng)建一個新的名為stacked_card_demo.dart的dart文件。
現(xiàn)在,我們將創(chuàng)建一個styleCards列表,并在其中添加一個StyleCard類。
我們創(chuàng)建了八個卡片控件,并在其中添加了image,title和description。 程序運行后,我們將看到一個卡片列表, 當(dāng)用戶向上滑動時,所有卡片都將堆疊在一起; 當(dāng)用戶向下滑動時,卡片都將回到原始位置;
效果如下:
Demo地址:
ListView的基礎(chǔ)創(chuàng)建使用有三種方式:
通過默認構(gòu)造函數(shù)來創(chuàng)建列表,應(yīng)用場景 = 短列表
這種方式創(chuàng)建的列表存在一個問題:對于那些長列表或者需要較昂貴渲染開銷的子組件,即使還沒有出現(xiàn)在屏幕中但仍然會被ListView所創(chuàng)建,這將是一項較大的開銷,使用不當(dāng)可能引起性能問題甚至卡頓。
長列表
列表子項之間需要分割線
ListView的進階使用主要包括:下拉刷新 上拉加載
在Flutter中,ListView結(jié)合RefreshIndicator組件實現(xiàn)下拉刷新
通過包裹一層RefreshIndicator,自定義onRefresh回調(diào)方法實現(xiàn)
方式有兩種:
通過ListView.controller屬性可以判斷ListView是否滑動到了底部,再進行上拉加載
NotificationListener是一個Widget,可監(jiān)聽子Widget發(fā)出的Notification
ListView在滑動時中會發(fā)出ScrollNotification類型的通知,可通過監(jiān)聽該通知得到ListView的滑動狀態(tài),判斷是否滑動到了底部,從而進行上拉加載
NotificationListener有一個onNotification屬性,定義了監(jiān)聽的回調(diào)方法,通過它來處理加載更多邏輯
不定期分享關(guān)于 安卓開發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
文章標(biāo)題:flutter折疊列表,flutter可折疊的listview
文章出自:http://chinadenli.net/article32/dsggosc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、營銷型網(wǎng)站建設(shè)、小程序開發(fā)、做網(wǎng)站、定制網(wǎng)站、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)