注意: 滾動組件添加: physics: ClampingScrollPhysics() 可以處理IOS系統(tǒng)的物理滾動的效果(即橡皮筋效果)
企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對外擴展宣傳的重要窗口,一個合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺,成都創(chuàng)新互聯(lián)公司面向各種領域:成都玻璃隔斷等成都網(wǎng)站設計、成都全網(wǎng)營銷推廣解決方案、網(wǎng)站設計等建站排名服務。
ListView 是最常用的可滾動組件之一,可以沿一個方向線性排布所有子組件,并且它也支持基于Sliver的延遲構建模型
默認構造函數(shù):
ListView.builder:
ListView.separated:
ListView.separated 可以在生成的列表項之間添加一個分割組件,它比 ListView.builder 多了一個 separatorBuilder 參數(shù),該參數(shù)是一個分割組件生成器。
RefreshIndicator 下拉刷新:
RefreshIndicator 是 Material 風格的下拉刷新組件。
CupertinoSliverRefreshControl 下拉刷新:
CupertinoSliverRefreshControl 是 ios 風格的下拉刷新控件。
上拉加載的功能,需要用到 ScrollController + ListView組件:
ListView的基礎創(chuàng)建使用有三種方式:
通過默認構造函數(shù)來創(chuàng)建列表,應用場景 = 短列表
這種方式創(chuàng)建的列表存在一個問題:對于那些長列表或者需要較昂貴渲染開銷的子組件,即使還沒有出現(xiàn)在屏幕中但仍然會被ListView所創(chuàng)建,這將是一項較大的開銷,使用不當可能引起性能問題甚至卡頓。
長列表
列表子項之間需要分割線
ListView的進階使用主要包括:下拉刷新 上拉加載
在Flutter中,ListView結合RefreshIndicator組件實現(xiàn)下拉刷新
通過包裹一層RefreshIndicator,自定義onRefresh回調方法實現(xiàn)
方式有兩種:
通過ListView.controller屬性可以判斷ListView是否滑動到了底部,再進行上拉加載
NotificationListener是一個Widget,可監(jiān)聽子Widget發(fā)出的Notification
ListView在滑動時中會發(fā)出ScrollNotification類型的通知,可通過監(jiān)聽該通知得到ListView的滑動狀態(tài),判斷是否滑動到了底部,從而進行上拉加載
NotificationListener有一個onNotification屬性,定義了監(jiān)聽的回調方法,通過它來處理加載更多邏輯
不定期分享關于 安卓開發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。
Flutter有生成構造函數(shù)、默認構造函數(shù)、命名構造函數(shù)、重定向構造函數(shù)、常量構造函數(shù)、工廠構造函數(shù)
生成構造函數(shù)是最常見的構造函數(shù),即生成實體類對象。
如果未聲明構造函數(shù),則會提供默認構造函數(shù)。 默認構造函數(shù)沒有參數(shù),并調用父類無參數(shù)構造函數(shù)。
默認情況下,子類中的構造函數(shù)調用父類的未命名無參數(shù)構造函數(shù)。 父類的構造函數(shù)在子類構造函數(shù)體的開頭被調用。 如果還使用初始化了列表,則會在調用父類構造函數(shù)之前執(zhí)行。 執(zhí)行順序如下:
如果父類沒有未命名的無參數(shù)構造函數(shù),則必須手動調用父類中的一個構造函數(shù)。 在子類的構造函數(shù)體之后用冒號(:)指定父類構造函數(shù)
當需要定義一個有特別含義的構造函數(shù)的時候,可以通過命名構造 形式:構造函數(shù).XXX來命名構造函數(shù)
有時構造函數(shù)需要重定向到同一個類中的另一個構造函數(shù),在冒號后面用this:
如果你的類需要成為永遠不會更改的對象,則可以使這些對象成為編譯時常量。 定義const構造函數(shù)要確保所有實例變量都是final。
不用直接創(chuàng)建對象(可以通過調用其他構造函數(shù)創(chuàng)建)
上一篇介紹Banner的開發(fā)。在大多數(shù)應用場景中。banner和ListView通常是一起顯示的。 并且能夠共同滑動。例如如下界面:
要實現(xiàn)上圖的界面,直接想到是ListView添加Header。但在Flutter中,ListView 組件相當于RecyclerView,所以添加Header也用RecyclerView的原理:
封裝ListPage組件,list_page.dart
使用及測試:異步加載網(wǎng)絡數(shù)據(jù)使用
SliverAppBar 控件,一個 MD 的 AppBar 。屬性和 AppBar 類似,但做的效果比 AppBar 更加強大。相同的屬性具體可以看 Flutter 之 Scaffold 控件 , 里面有 AppBar 控件的介紹。那么還有些沒有的屬性:
結合 elevation 使用,當elevation 不為 0 的時候,是否顯示陰影
AppBar 展開時候的高度
true 的時候下滑AppBar優(yōu)先滑動展示,展示完成后才給滑動控件滑動
snap 為 true, 則 floating 也要為 true 。true 的時候根據(jù)手指松開的位置展開或者收縮AppBar
appBar 收縮到最小高度的時候 appBar 是否可見
SliverAppBar 往往做為 CustomScrollView 的第一個子元素,根據(jù)滾動控件的偏移量或者浮動的位置來改變 SliverAppBar 的高度。所以具體用法如下
另外在上面設計到 FlexibleSpaceBar 控件,F(xiàn)lexibleSpaceBar 有個 collapseMode 屬性
為 Sliver 系列控件添加一個 padding 。如給上面 SliverAppBar 添加一個 Padding 。
多行多列的列表控件,相當于 Android 的 GridView,有兩個屬性
SliverChildDelegate,這里有兩種方式創(chuàng)建
SliverGridDelegate,也是有兩種方式創(chuàng)建
結合上面展示效果
和上面 delegate 屬性一樣,需要創(chuàng)建一個 SliverChildDelegate 。
比 SliverList 多一個 itemExtent 屬性,設置 item 的高度 。item 里面的子控件無法再改動高度。
上面 SliverAppBar 就是結合 SliverPersistentHeader 實現(xiàn)的效果,SliverPersistentHeader 需要一個 SliverPersistentHeaderDelegate 。 實現(xiàn) SliverPersistentHeaderDelegate 有 4 個方法需要重寫
至于效果,具體效果具體分析。
有一個 Widget 屬性,主要作用是在 CustomScrollView 里面添加多種不同布局的樣式。
占滿一屏或者比一屏更多的布局,
滑動剩余部分展示的布局