bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

flutter部分滾動,flutter滑動懸停頭部

Flutter 之 可滾動組件 -- 理論知識點(十四)

Flutter 中有兩種布局模型:

公司主營業務:成都網站設計、做網站、移動網站開發等業務。幫助企業客戶真正實現互聯網宣傳,提高企業的競爭能力。創新互聯是一支青春激揚、勤奮敬業、活力青春激揚、勤奮敬業、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰,讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創新互聯推出海林免費做網站回饋大家。

基于 RenderBox 的盒模型布局。

基于 Sliver ( RenderSliver ) 按需加載列表布局。

通常可滾動組件的子組件可能會非常多、占用的總高度也會非常大;如果要一次性將子組件全部構建出將會非常昂貴!為此,Flutter中提出一個Sliver(中文為“薄片”的意思)概念,Sliver 可以包含一個或多個子組件。Sliver 的主要作用是配合:加載子組件并確定每一個子組件的布局和繪制信息,如果 Sliver 可以包含多個子組件時,通常會實現按需加載模型。

只有當 Sliver 出現在視口中時才會去構建它,這種模型也稱為“基于Sliver的列表按需加載模型”。可滾動組件中有很多都支持基于Sliver的按需加載模型,如 ListView 、 GridView ,但是也有不支持該模型的,如 SingleChildScrollView 。

Flutter 中的可滾動主要由三個角色組成: Scrollable 、 Viewport 和 Sliver :

具體布局過程:

比如有一個 ListView,大小撐滿屏幕,假設它有 100 個列表項(都是RenderBox)且每個列表項高度相同,結構如圖6-1所示:

圖中白色區域為設備屏幕,也是 Scrollable 、 Viewport 和 Sliver 所占用的空間,三者所占用的空間重合,父子關系為:Sliver 父組件為 Viewport,Viewport的 父組件為 Scrollable 。注意ListView 中只有一個 Sliver,在 Sliver 中實現了子組件的按需加載。

其中頂部和底部灰色的區域為 cacheExtent,它表示預渲染的高度,需要注意這是在可視區域之外,如果 RenderBox 進入這個區域內,即使它還未顯示在屏幕上,也是要先進行構建的,預渲染是為了后面進入 Viewport 的時候更絲滑。cacheExtent 的默認值是 250,在構建可滾動列表時我們可以指定這個值,這個值最終會傳給 Viewport。

用于處理滑動手勢,確定滑動偏移,滑動偏移變化時構建 Viewport,我們看一下其關鍵的屬性:

在可滾動組件的坐標描述中,通常將滾動方向稱為主軸,非滾動方向稱為縱軸。由于可滾動組件的默認方向一般都是沿垂直方向,所以默認情況下主軸就是指垂直方向,水平方向同理。

Viewport 比較簡單,用于渲染當前視口中需要顯示 Sliver。

需要注意的是:

Sliver 主要作用是對子組件進行構建和布局,比如 ListView 的 Sliver 需要實現子組件(列表項)按需加載功能,只有當列表項進入預渲染區域時才會去對它進行構建和布局、渲染。

Sliver 對應的渲染對象類型是 RenderSliver,RenderSliver 和 RenderBox 的相同點是都繼承自 RenderObject 類,不同點是在布局的時候約束信息不同。RenderBox 在布局時父組件傳遞給它的約束信息對應的是 BoxConstraints ,只包含最大寬高的約束;而 RenderSliver 在布局時父組件(列表)傳遞給它的約束是對應的是 SliverConstraints 。關于 Sliver 的布局協議,我們將在本章最后一節中介紹。

幾乎所有的可滾動組件在構造時都能指定 scrollDirection (滑動的主軸)、 reverse (滑動方向是否反向)、 controller 、 physics 、 cacheExtent ,這些屬性最終會透傳給對應的 Scrollable 和 Viewport,這些屬性我們可以認為是可滾動組件的通用屬性,后續再介紹具體的可滾動組件時將不再贅述。

可滾動組件都有一個 controller 屬性,通過該屬性我們可以指定一個 ScrollController 來控制可滾動組件的滾動,比如可以通過ScrollController來同步多個組件的滑動聯動。由于 ScrollController 是需要結合可滾動組件一起工作,所以本章中,我們會在介紹完 ListView 后詳細介紹 ScrollController。

Scrollbar是一個Material風格的滾動指示器(滾動條),如果要給可滾動組件添加滾動條,只需將Scrollbar作為可滾動組件的任意一個父級組件即可,如:

Scrollbar 和 CupertinoScrollbar 都是通過監聽滾動通知來確定滾動條位置的。關于的滾動通知的詳細內容我們將在本章最后一節中專門介紹。

CupertinoScrollbar是 iOS 風格的滾動條,如果你使用的是Scrollbar,那么在iOS平臺它會自動切換為CupertinoScrollbar

Flutter ScrollView(滾動視圖)

ScrollView 是一個帶有滾動的視圖組件。

ScrollView 由三部分組成:

ScrollView 有以下常用屬性:

注:ScrollView 是一個抽象類,通常使用 CustomScrollView。

SliverAppBar 可以實現背景,標題,頂部導航欄聯動,漸隱漸出動畫。

25.Flutter的ListView監聽滾動事件之ScrollController

對于滾動的視圖,我們經常需要監聽它的一些滾動事件,在監聽到的時候去做對應的一些事情。

比如視圖滾動到底部時,我們可能希望做上拉加載更多;

比如滾動到一定位置時顯示一個回到頂部的按鈕,點擊回到頂部的按鈕,回到頂部;

比如監聽滾動什么時候開始,什么時候結束;

在Flutter中監聽滾動相關的內容由兩部分組成:ScrollController和ScrollNotification。

ScrollController

在Flutter中,Widget并不是最終渲染到屏幕上的元素(真正渲染的是RenderObject),因此通常這種監聽事件以及相關的信息并不能直接從Widget中獲取,而是必須通過對應的Widget的Controller來實現。

ListView、GridView的組件控制器是ScrollController,我們可以通過它來獲取視圖的滾動信息,并且可以調用里面的方法來更新視圖的滾動位置。

另外,通常情況下,我們會根據滾動的位置來改變一些Widget的狀態信息,所以ScrollController通常會和StatefulWidget一起來使用,并且會在其中控制它的初始化、監聽、銷毀等事件。

我們來做一個案例,當滾動到1000位置的時候,顯示一個回到頂部的按鈕:

jumpTo(double offset)、animateTo(double offset,...):這兩個方法用于跳轉到指定的位置,它們不同之處在于,后者在跳轉時會執行一個動畫,而前者不會。

ScrollController間接繼承自Listenable,我們可以根據ScrollController來監聽滾動事件。

Flutter:手把手教你使用滾動型列表組件:ListView

ListView的基礎創建使用有三種方式:

通過默認構造函數來創建列表,應用場景 = 短列表

這種方式創建的列表存在一個問題:對于那些長列表或者需要較昂貴渲染開銷的子組件,即使還沒有出現在屏幕中但仍然會被ListView所創建,這將是一項較大的開銷,使用不當可能引起性能問題甚至卡頓。

長列表

列表子項之間需要分割線

ListView的進階使用主要包括:下拉刷新 上拉加載

在Flutter中,ListView結合RefreshIndicator組件實現下拉刷新

通過包裹一層RefreshIndicator,自定義onRefresh回調方法實現

方式有兩種:

通過ListView.controller屬性可以判斷ListView是否滑動到了底部,再進行上拉加載

NotificationListener是一個Widget,可監聽子Widget發出的Notification

ListView在滑動時中會發出ScrollNotification類型的通知,可通過監聽該通知得到ListView的滑動狀態,判斷是否滑動到了底部,從而進行上拉加載

NotificationListener有一個onNotification屬性,定義了監聽的回調方法,通過它來處理加載更多邏輯

不定期分享關于 安卓開發 的干貨,追求 短、平、快 ,但 卻不缺深度 。

本文名稱:flutter部分滾動,flutter滑動懸停頭部
瀏覽地址:http://vcdvsql.cn/article46/dsdejeg.html

成都網站建設公司_創新互聯,為您提供ChatGPT網站內鏈Google用戶體驗網站營銷面包屑導航

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名