基本和AppBar一樣,只是他只能在CustomScrollView中使用,應(yīng)該很常見,滑動(dòng)的時(shí)候固定appbar,就需要用到他.
站在用戶的角度思考問題,與客戶深入溝通,找到美蘭網(wǎng)站設(shè)計(jì)與美蘭網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、主機(jī)域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋美蘭地區(qū)。
大部分和appbar一樣,主要說下重要的幾個(gè):
是否將導(dǎo)航欄部分固定在appbar的位置.這個(gè)需求在實(shí)際中很常用. 看看效果圖.
當(dāng) pinned = false:
可以看到appbar并沒有固定在最上面,而是根據(jù)內(nèi)容劃出了界面.
當(dāng) pinned = true :
這個(gè)應(yīng)該是需求中經(jīng)常用到的效果了.
當(dāng)floating = false :
當(dāng)floating = true:
仔細(xì)看 ,區(qū)別是在列表整體向下滑動(dòng)時(shí),appbar開始顯示的位置不同.
當(dāng)為false時(shí) ,向下滑動(dòng)時(shí),會先降列表內(nèi)容滑動(dòng)頂部,然后appbar會跟著列表滑動(dòng)顯示出來.如上圖
當(dāng)為true時(shí), 向下滑動(dòng)時(shí),appbar會先跟著列表滑動(dòng)顯示出來. 然后繼續(xù)列表的滑動(dòng). 如上圖
不能單獨(dú)使用要配合 ****floating 和 ****pinned
具體效果看官網(wǎng)地址
是否展開,默認(rèn)false,直接看值為true的效果圖,就明白了.
可以再里面添加擴(kuò)展的內(nèi)容:
通過測試發(fā)現(xiàn) **后面不是 FlexibleSpaceBar 的話, stretch = true 無效. **
和Padding一樣.子控件是 sliver 類型...
上圖中在padding中添加了一個(gè)背景色為青色的容器widget
里面可以設(shè)置不是 sliver 類型的widget。如上圖中的 padding中添加的 container
就兩個(gè)協(xié)議,一個(gè)是布局協(xié)議一個(gè)展示協(xié)議.基本和GridView一樣.也有count和extext... 不設(shè)置個(gè)數(shù)默認(rèn)無數(shù)個(gè)
SliverChildListDelegate 這種方式前提是知道cell個(gè)數(shù),比較少,好搭建
SliverChildBuilderDelegate 這種方式,可以根據(jù)數(shù)組去創(chuàng)建,不知道cell個(gè)數(shù)
和listview差不多.也是協(xié)議 不設(shè)置個(gè)數(shù)默認(rèn)無數(shù)個(gè)
ListView的基礎(chǔ)創(chuàng)建使用有三種方式:
通過默認(rèn)構(gòu)造函數(shù)來創(chuàng)建列表,應(yīng)用場景 = 短列表
這種方式創(chuàng)建的列表存在一個(gè)問題:對于那些長列表或者需要較昂貴渲染開銷的子組件,即使還沒有出現(xiàn)在屏幕中但仍然會被ListView所創(chuàng)建,這將是一項(xiàng)較大的開銷,使用不當(dāng)可能引起性能問題甚至卡頓。
長列表
列表子項(xiàng)之間需要分割線
ListView的進(jìn)階使用主要包括:下拉刷新 上拉加載
在Flutter中,ListView結(jié)合RefreshIndicator組件實(shí)現(xiàn)下拉刷新
通過包裹一層RefreshIndicator,自定義onRefresh回調(diào)方法實(shí)現(xiàn)
方式有兩種:
通過ListView.controller屬性可以判斷ListView是否滑動(dòng)到了底部,再進(jìn)行上拉加載
NotificationListener是一個(gè)Widget,可監(jiān)聽子Widget發(fā)出的Notification
ListView在滑動(dòng)時(shí)中會發(fā)出ScrollNotification類型的通知,可通過監(jiān)聽該通知得到ListView的滑動(dòng)狀態(tài),判斷是否滑動(dòng)到了底部,從而進(jìn)行上拉加載
NotificationListener有一個(gè)onNotification屬性,定義了監(jiān)聽的回調(diào)方法,通過它來處理加載更多邏輯
不定期分享關(guān)于 安卓開發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
onInteractionEnd 交互結(jié)束
onInteractionStart 交互開始
onInteractionUpdate 滑動(dòng)時(shí)候一直會回調(diào)
focalPoint 是相對于屏幕左上角的偏移量。
localFocalPoint是相對于父容器區(qū)域左上角的偏移量。
scale縮放量。
horizontalScale水平縮放量。
verticalScale豎直縮放量。
rotation旋轉(zhuǎn)量。------ 這里說明能監(jiān)聽到旋轉(zhuǎn)量
還可以通過transformationController進(jìn)行變換控制,有興趣的可以自己研究。
參考文章
在移動(dòng)端,各個(gè)平臺或 UI 系統(tǒng)的原始指針事件模型基本都是一致,即:一次完整的事件分為三個(gè)階段:手指按下、手指移動(dòng)、和手指抬起,而更高級別的手勢(如點(diǎn)擊、雙擊、拖動(dòng)等)都是基于這些原始事件的。
Flutter 中可以使用 Listener widget 來監(jiān)聽原始觸摸事件,它也是一個(gè)功能性 widget。
Listener 的常見屬性
用法如下:
加載更多需要對 ListView 進(jìn)行監(jiān)聽,所以需要進(jìn)行監(jiān)聽器的設(shè)置,在 State 中進(jìn)行監(jiān)聽器的初始化。
2、使用上述的 Listener 來監(jiān)聽,通過 Listener 的 onPointerMove(手指在屏幕上滑動(dòng))來監(jiān)聽滑動(dòng)的距離,當(dāng)滑動(dòng)到底部時(shí)加載更多數(shù)據(jù)
1.webview_flutter
2.flutter_inappwebview
3.flutter_webview_plugin
筆者最近發(fā)現(xiàn)webview_flutter在Android端嵌套帶有較長的Webview頁面時(shí)偶?xì)W會存在卡頓問題表現(xiàn)為加速向下滑動(dòng)到頁面底部,然后從底部慢慢像上滑就不起作用了,體驗(yàn)很不好,經(jīng)過一天的排查和實(shí)驗(yàn)發(fā)現(xiàn)是webview_flutter插件自己的問題,用原生嵌套WebView并沒有問題,后來改成flutter_webview_plugin問題可以解決,但是flutter_webview_plugin插件并不是基于flutter渲染的并不能在嵌套webview的頁面自定義flutter樣式層,后來發(fā)現(xiàn)使用flutter_inappwebview插件能夠完美解決問題。推薦你們用flutter_inappwebview。