欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

flutter無(wú)限滾動(dòng),flutter左右滑動(dòng)

Flutter 可滾動(dòng)組件 之 SingleChildScrollView (十五)

SingleChildScrollView 源碼定義如下:

成都創(chuàng)新互聯(lián)一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、成都網(wǎng)頁(yè)設(shè)計(jì)、微信小程序開(kāi)發(fā)、成都網(wǎng)站開(kāi)發(fā)、成都網(wǎng)站制作、成都軟件開(kāi)發(fā)、APP應(yīng)用開(kāi)發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來(lái)見(jiàn)證!

需要注意的是, 通常 SingleChildScrollView 只應(yīng)在期望的內(nèi)容不會(huì)超過(guò)屏幕太多時(shí)使用 ,這是因?yàn)?SingleChildScrollView 不支持基于 Sliver 的延遲加載模型,所以如果預(yù)計(jì)視口可能包含超出屏幕尺寸太多的內(nèi)容時(shí),那么使用 SingleChildScrollView 將會(huì)非常昂貴(性能差),此時(shí)應(yīng)該使用一些支持Sliver延遲加載的可滾動(dòng)組件,如 ListView 。

示例1

下面是一個(gè)將大寫(xiě)字母 A-Z 沿垂直方向顯示的例子,由于垂直方向空間會(huì)超過(guò)屏幕視口高度,所以我們使用SingleChildScrollView:

示例2

示例3 - 橫向滾動(dòng)

Flutter:手把手教你使用滾動(dòng)型列表組件:ListView

ListView的基礎(chǔ)創(chuàng)建使用有三種方式:

通過(guò)默認(rèn)構(gòu)造函數(shù)來(lái)創(chuàng)建列表,應(yīng)用場(chǎng)景 = 短列表

這種方式創(chuàng)建的列表存在一個(gè)問(wèn)題:對(duì)于那些長(zhǎng)列表或者需要較昂貴渲染開(kāi)銷的子組件,即使還沒(méi)有出現(xiàn)在屏幕中但仍然會(huì)被ListView所創(chuàng)建,這將是一項(xiàng)較大的開(kāi)銷,使用不當(dāng)可能引起性能問(wèn)題甚至卡頓。

長(zhǎng)列表

列表子項(xiàng)之間需要分割線

ListView的進(jìn)階使用主要包括:下拉刷新 上拉加載

在Flutter中,ListView結(jié)合RefreshIndicator組件實(shí)現(xiàn)下拉刷新

通過(guò)包裹一層RefreshIndicator,自定義onRefresh回調(diào)方法實(shí)現(xiàn)

方式有兩種:

通過(guò)ListView.controller屬性可以判斷ListView是否滑動(dòng)到了底部,再進(jìn)行上拉加載

NotificationListener是一個(gè)Widget,可監(jiān)聽(tīng)子Widget發(fā)出的Notification

ListView在滑動(dòng)時(shí)中會(huì)發(fā)出ScrollNotification類型的通知,可通過(guò)監(jiān)聽(tīng)該通知得到ListView的滑動(dòng)狀態(tài),判斷是否滑動(dòng)到了底部,從而進(jìn)行上拉加載

NotificationListener有一個(gè)onNotification屬性,定義了監(jiān)聽(tīng)的回調(diào)方法,通過(guò)它來(lái)處理加載更多邏輯

不定期分享關(guān)于 安卓開(kāi)發(fā) 的干貨,追求 短、平、快 ,但 卻不缺深度 。

Flutter了解之可滑動(dòng)組件

Flutter官方并沒(méi)有對(duì)Widget進(jìn)行官方分類,對(duì)其分類主要是為了對(duì)Widget進(jìn)行功能區(qū)分。

當(dāng)組件內(nèi)容超過(guò)當(dāng)前顯示窗口時(shí),如果沒(méi)有特殊處理,F(xiàn)lutter則會(huì)提示Overflow錯(cuò)誤。為此,F(xiàn)lutter提供了多種可滾動(dòng)組件用于顯示列表和長(zhǎng)布局。

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

通??蓾L動(dòng)組件的子組件可能會(huì)非常多、占用的總高度也會(huì)非常大;如果要一次性將子組件全部構(gòu)建出將會(huì)非常昂貴!為此,F(xiàn)lutter中提出一個(gè)Sliver(中文為“薄片”的意思)概念,如果一個(gè)可滾動(dòng)組件支持Sliver模型,那么該滾動(dòng)可以將子組件分成好多個(gè)“薄片”(Sliver),只有當(dāng)Sliver出現(xiàn)在視口中時(shí)才會(huì)去構(gòu)建它,這種模型也稱為“基于Sliver的延遲構(gòu)建模型”。

可滾動(dòng)組件中有很多都支持基于Sliver的延遲構(gòu)建模型,如ListView、GridView,但是也有不支持該模型的,如SingleChildScrollView。

在很多布局系統(tǒng)中都有ViewPort的概念,在Flutter中,術(shù)語(yǔ)ViewPort(視口),如無(wú)特別說(shuō)明,則是指一個(gè)Widget的實(shí)際顯示區(qū)域。例如: 一個(gè)ListView的顯示區(qū)域高度是800像素,雖然其列表項(xiàng)總高度可能遠(yuǎn)遠(yuǎn)超過(guò)800像素,但是其ViewPort仍然是800像素。

可滾動(dòng)組件都直接或間接包含一個(gè)Scrollable組件

如果要給可滾動(dòng)組件添加滾動(dòng)條,只需將Scrollbar作為可滾動(dòng)組件的任意一個(gè)父級(jí)組件。

沿一個(gè)方向線性排布所有子組件。支持基于Sliver的延遲構(gòu)建模型。

ListView高度邊界無(wú)法確定時(shí)會(huì)異常。

默認(rèn)構(gòu)造函數(shù)有一個(gè)children參數(shù),它接受一個(gè)Widget列表。

實(shí)際上通過(guò)此方式創(chuàng)建的ListView和使用SingleChildScrollView+Column的方式?jīng)]有本質(zhì)的區(qū)別。

適合只有少量的子組件的情況,因?yàn)檫@種方式需要將所有children都提前創(chuàng)建好(這需要做大量工作),而不是等到子widget真正顯示的時(shí)候再創(chuàng)建,也就是說(shuō)通過(guò)默認(rèn)構(gòu)造函數(shù)構(gòu)建的ListView沒(méi)有應(yīng)用基于Sliver的懶加載模型。

例(水平滾動(dòng))

適合列表項(xiàng)比較多(或者無(wú)限)的情況,因?yàn)橹挥挟?dāng)子組件真正顯示的時(shí)候才會(huì)被創(chuàng)建,也就說(shuō)通過(guò)該構(gòu)造函數(shù)創(chuàng)建的ListView是支持基于Sliver的懶加載模型的。

例(不同類型的item)

ListView.separated可以在生成的列表項(xiàng)之間添加一個(gè)分割組件,它比ListView.builder多了一個(gè)separatorBuilder參數(shù),該參數(shù)是一個(gè)分割組件生成器。

類似于Android中的ScrollView,它只能接收一個(gè)子組件。

通常內(nèi)容不會(huì)超過(guò)屏幕太多時(shí)使用SingleChildScrollView,這是因?yàn)樗恢С只赟liver的延遲實(shí)例化模型,所以如果預(yù)計(jì)視口可能包含超出屏幕尺寸太多的內(nèi)容時(shí),那么使用SingleChildScrollView將會(huì)非常昂貴(性能差),此時(shí)應(yīng)該使用一些支持Sliver延遲加載的可滾動(dòng)組件,如ListView。

例(將大寫(xiě)字母A-Z沿垂直方向顯示)

一個(gè)二維網(wǎng)格列表

GridView和ListView的大多數(shù)參數(shù)都是相同的。

橫軸為固定數(shù)量子元素。

GridView.count構(gòu)造函數(shù)內(nèi)部使用了SliverGridDelegateWithFixedCrossAxisCount。

例(GridView.count)

該子類實(shí)現(xiàn)了一個(gè)橫軸子元素為固定最大長(zhǎng)度的layout算法

當(dāng)子widget比較多時(shí),可以通過(guò)GridView.builder來(lái)動(dòng)態(tài)創(chuàng)建子widget。

GridView.builder 必須指定的參數(shù)有兩個(gè),其中itemBuilder為子widget構(gòu)建器。

舉個(gè)例子,假設(shè)有一個(gè)頁(yè)面,頂部需要一個(gè)GridView,底部需要一個(gè)ListView,而要求整個(gè)頁(yè)面的滑動(dòng)效果是統(tǒng)一的,即它們看起來(lái)是一個(gè)整體。如果使用GridView+ListView來(lái)實(shí)現(xiàn)的話,就不能保證一致的滑動(dòng)效果,因?yàn)樗鼈兊臐L動(dòng)效果是分離的。

所以這時(shí)就需要一個(gè)"膠水",把這些彼此獨(dú)立的可滾動(dòng)組件"粘"起來(lái),而CustomScrollView的功能就相當(dāng)于“膠水”。

Sliver有細(xì)片、薄片之意,在Flutter中Sliver通常指可滾動(dòng)組件子元素。在CustomScrollView中,需要粘起來(lái)的可滾動(dòng)組件就是CustomScrollView的Sliver了,如果直接將ListView、GridView作為CustomScrollView是不行的,因?yàn)樗鼈儽旧硎强蓾L動(dòng)組件而并不是Sliver。

因此,為了能讓可滾動(dòng)組件能和CustomScrollView配合使用,F(xiàn)lutter提供了一些可滾動(dòng)組件的Sliver版,如SliverList、SliverGrid等。

實(shí)際上Sliver版的可滾動(dòng)組件和非Sliver版的可滾動(dòng)組件最大的區(qū)別就是前者不包含滾動(dòng)模型(自身不能再滾動(dòng)),而后者包含滾動(dòng)模型 ,也正因如此,CustomScrollView才可以將多個(gè)Sliver"粘"在一起,這些Sliver共用CustomScrollView的Scrollable,所以最終才實(shí)現(xiàn)了統(tǒng)一的滑動(dòng)效果。

例(SliverList)

例(SliverGrid)

可以用ScrollController來(lái)控制可滾動(dòng)組件的滾動(dòng)位置

滾動(dòng)位置恢復(fù)

ScrollPosition

ScrollController控制原理

滾動(dòng)監(jiān)聽(tīng)

【Flutter】圖片、內(nèi)容、滾動(dòng)空間溢出調(diào)整

空間超出提示

注釋 :Flutter Incorrect use of ParentDataWidget

問(wèn)題原因:Expanded、Flexible等組件,在“Container、Padding、Stack”組件中導(dǎo)致的。

解決方案:保持: Expanded、Flexible 只在 Row、Column 等組件內(nèi),不在其他組件內(nèi)使用。

控件Row有一個(gè)水平的布局方向,但是內(nèi)容已經(jīng)超出了可顯示的范圍。

建議我們使用有彈性的控件比如Expanded代替,或者使用可裁剪的控件ClipRect代替,還可以使用具體滾動(dòng)屬性的控件比如ListView代替

1、類似圖片加載失敗,然后溢出擠壓空間,可以用Container包裹一下

直接使用,如果圖片地址失效,就會(huì)溢出

直接使用,圖片鏈接失效引起

2、類似這種超出

A RenderFlex overflowed by 48 pixels on the right.

3、類似這種Column滾動(dòng)超出!

實(shí)現(xiàn)頁(yè)面滑動(dòng)需要用到SingleChildScrollView組件,SingleChildScrollView和Android中ScrollView類似

問(wèn)題原因:Expanded、Flexible等組件,在“Container、Padding、Stack”組件中導(dǎo)致的。

解決方案:保持:Expanded、Flexible只在Row、Column等組件內(nèi),不在其他組件內(nèi)使用。

當(dāng)前題目:flutter無(wú)限滾動(dòng),flutter左右滑動(dòng)
本文網(wǎng)址:http://chinadenli.net/article22/hohocc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)軟件開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、關(guān)鍵詞優(yōu)化、移動(dòng)網(wǎng)站建設(shè)、商城網(wǎng)站

廣告

聲明:本網(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)

商城網(wǎng)站建設(shè)