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

flutter滾動嵌套,flutter多層嵌套滑動

Flutter Column嵌套Listview不能滾動的問題

如果做這個篩選界面的時候,剛開始最外層用Column嵌套一個Container(紅色部分)和ListView。

專注于為中小企業(yè)提供成都網(wǎng)站制作、做網(wǎng)站服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)襄垣免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。

然后每個Item也是Column嵌套一個Container(大分類)

和GridView(小分類) 。出現(xiàn)的問題就是不能滾動。

在Listview和GridView外面嵌套一個Expanded,不能滾動是因?yàn)镃ontainer尺寸計(jì)算的問題,Expande就是listview有多大就有多大。

Item嵌套

Flutter踩坑之旅

記錄下自己踩過的坑,怕忘了

一.TextField:

1.去掉輸入數(shù)字的計(jì)數(shù):decoration中的counterStyle: TextStyle(color: Colors.transparent).

2.去掉獲取和失去焦點(diǎn)時邊框改變顏色的效果:decoration內(nèi)border: InputBorder.none,

3.去邊框時設(shè)置BorderSide的width為0或color: Colors.transparent后依然存在邊框時,需要設(shè)置為borderSide: BorderSide.none

4.設(shè)置背景色需要在decoration內(nèi) ? ? filled:true, ? fillColor: Colors.blue同時設(shè)置才會顯示

二.Uint8List類型和string類型,Listint的轉(zhuǎn)換

連續(xù)兩次base64解碼時,參數(shù)只能使用string類型,但是base64解碼后是Uint8List類型,此時需要將Uint8List類型轉(zhuǎn)換為string類型,使用:utf8.decode(Uint8List)即可,需要import 'dart:convert';

Listint轉(zhuǎn)Uint8List:讀取接口時獲取的數(shù)據(jù)是Listint的圖片數(shù)據(jù),想顯示時需要轉(zhuǎn)成Uint8List,然后使用Image.memory(),使用:Uint8List.fromList(Listint)即可

三.報(bào)錯:DioError [DioErrorType.DEFAULT]: FormatException: Unexpected character (at character 1)MGFlMFo0NEZ3RWNMbE5YbGNGOXZGcUlJdUhIS2x2Q3NlckxqWXlEeG5JWndZdXIrSUpLN3ZOczR...

這是因?yàn)閐io請求返回的數(shù)據(jù)默認(rèn)是以json的格式讀取的,而返回的數(shù)據(jù)是密文形式,需要修改dio的Options的responseType為ResponseType.PLAIN,這樣返回的數(shù)據(jù)就以字符串形式處理.

四.去掉點(diǎn)擊控件背景出現(xiàn)的水波紋效果,即去掉md的效果:

在main.dart的MaterialApp內(nèi)的theme加上splashColor: Colors.transparent

五.布局去掉沉浸式效果和布局設(shè)置占滿全屏卻無效的問題

使用Scaffold的body的布局默認(rèn)是沉浸式的,將狀態(tài)欄一起包含了,可以通過在body后添加一層SafeArea即可.

布局設(shè)置double.infinity占滿全屏高度卻無效,大部分情況都是因?yàn)槟骋患壍母覆季值母叨纫呀?jīng)有了限制,所以設(shè)置充滿屏幕只會充滿父布局,有些widget默認(rèn)是按內(nèi)容填充類似wrap_content就會導(dǎo)致寫布局的過程中自己沒有限制高度但最后的布局不是自己想要的,可以給各個父布局設(shè)置不同背景顏色來查看是從哪兒開始被限制了高度來排查問題.

六.占滿剩余空間,類似android的match_parent可以使用double.infinity

七.LinearProgressIndicator

1.LinearProgressIndicator設(shè)置進(jìn)度值的顏色為單一顏色:valueColor : new AlwaysStoppedAnimation(Color(JColor.blue))

2.給LinearProgressIndicator設(shè)置圓角:ClipRRect(

borderRadius:BorderRadius.circular(60.0),

child:LinearProgressIndicator(value:0.2,backgroundColor:Color(JColor.grayBg),valueColor:new AlwaysStoppedAnimation(Color(JColor.blue)),

)

八.Expanded:

1.若嵌套多層column且內(nèi)容的高度都不確定需要占滿剩余空間,需要每層的column的內(nèi)容都嵌套一層expanded來申明每層都占滿剩余的空間,否則最里面的內(nèi)容層需要指定高度,不然會報(bào)錯

九.Container設(shè)置最小/大寬度或高度:

constraints:BoxConstraints(minHeight:56),

十.滑動的widget嵌套:

1.解決滑動沖突:內(nèi)層嵌套的滑動widget設(shè)置physics:NeverScrollableScrollPhysics()

2.解決滑動嵌套u(yù)i顯示不出來或者報(bào)錯,內(nèi)層的滑動widget設(shè)置shrinkWrap:true

十一.使用multi_image_picker: ^4.3.4安卓運(yùn)行報(bào)錯Didn't find class "com.sangcomz.fishbun.FishBunFileProvider"

1.需要android工程支持androidx,需要在android工程的gradle.properties內(nèi)添加android.enableJetifier=true和android.useAndroidX=true并點(diǎn)擊右上角的open for editing in android studio,運(yùn)行成功后就可以了

十二.使用textfield時的文字ui總是很高

使用了maxlength且只是在textfield的InputDecoration設(shè)置counterStyle的顏色為透明使下面的計(jì)數(shù)文字消失會導(dǎo)致文字ui很高,counter的計(jì)數(shù)文字只是顏色是透明但依然在布局中占了位置所以導(dǎo)致文字很高,直接使用counterText:""即可

十三.使用ListView報(bào)錯Vertical viewport was given unbounded height

需要將ListView放入Expanded內(nèi)部

Flutter 仿京東商品詳情頁嵌套滾動組件

這是領(lǐng)苗確認(rèn)記錄詳情頁需要展示給用戶的內(nèi)容,大家可以看到這個頁面要承載很多的信息,要向下滾動一段很長的距離才能展示完,想要實(shí)現(xiàn)的效果是在頁面的頂部有一個TabBar,用戶可以通過點(diǎn)擊TabBar進(jìn)行錨點(diǎn)(jumpTo到指定位置),AppBar下的整個頁面是可以自由滾動的,在滾動過程中AppBar始終固定在頂部,TabBar在第一次進(jìn)入詳情頁的時候不顯示,只有在向下滑動的時候會由透明漸變?yōu)椴煌该鞑⒐潭ㄔ陧敳浚瑫r當(dāng)頁面滑動到TabBar錨點(diǎn)位置的時候TabBar會切換到對應(yīng)的下標(biāo),也就是要實(shí)現(xiàn)TabBar和ScrollView聯(lián)動的雙向控制,Tabbar的切換可以控制頁面的跳轉(zhuǎn),頁面的滑動又可以反過來控制TabBar的切換,類似與京東、淘寶的商品詳情頁效果。

SliverAppBar基本已經(jīng)達(dá)到了我們想要的效果,但在界面頂部會有塊空白區(qū)域試了很多方法怎么都去不掉,最后看了SliverAppBar這個控件的源碼發(fā)現(xiàn)是它自帶的初始高度。

這個沒法設(shè)置或消除,不可能直接去改源碼,所以后來換了一種實(shí)現(xiàn)思路,舍棄了SliverAppBar這個控件,以Stack的形式將TabBar置于ScrollView之上也能達(dá)到我們想要的效果,那么問題來了,如何實(shí)現(xiàn)TabBar的滾動漸變?很容易想到Opacity透明度控件,通過滾動監(jiān)聽來控制TabBar透明度的改變,借助Notificaion可以完美實(shí)現(xiàn)我們的需求。

Notification是Flutter中一個重要的機(jī)制,在Widget樹中,每一個節(jié)點(diǎn)都可以分發(fā)通知(Notification)與父(包括祖先)Widget通信,通知會沿著當(dāng)前節(jié)點(diǎn)(context)向上傳遞,所有父節(jié)點(diǎn)都可以通過NotificationListener來監(jiān)聽自己關(guān)注的通知,F(xiàn)lutter中稱這種通知由子向父的傳遞為“通知冒泡”(Notification Bubbling)。

  Flutter中很多地方使用了通知,如可滾動(Scrollable) Widget中滑動時就會分發(fā)ScrollNotification,而Scrollbar正是通過監(jiān)聽ScrollNotification來確定滾動條位置的。除了ScrollNotification,F(xiàn)lutter中還有SizeChangedLayoutNotification、KeepAliveNotification 、LayoutChangedNotification等。

通過NotificationListener監(jiān)聽滾動事件和通過ScrollController有兩個主要的不同:

通過改造后,目前這個組件的原型已經(jīng)實(shí)現(xiàn)并且可以滿足我們的需求,最后就是對該demo進(jìn)行完善使其能夠完美接入我們的業(yè)務(wù),做到技術(shù)賦能業(yè)務(wù)。

在一個頁面滾動區(qū)域不是很長的情況下不建議使用,只有當(dāng)頁面足夠長的情況下使用這個組件效果會比較好,因?yàn)槿绻粋€頁面過短,點(diǎn)擊TabBar最后一欄進(jìn)行錨點(diǎn)時,頁面最后一個子模塊內(nèi)容無法置頂,只會將頁面最后的內(nèi)容推到屏幕范圍內(nèi),并且由于TabBar監(jiān)聽到的是滾動的位置,會導(dǎo)致TabBar無法切換到對應(yīng)的下標(biāo),看上去會像個bug,其實(shí)是因?yàn)榈撞恳呀?jīng)沒有內(nèi)容了。

這個組件本身并沒有太大的技術(shù)難度,但是有一些比較細(xì)節(jié)的小邏輯得處理好,并且從中衍生出來的很多瑣碎的小的知識點(diǎn)都可以進(jìn)行拓展。 在組件開發(fā)的過程中遇到問題時不局限于控件本身的設(shè)計(jì)模式,轉(zhuǎn)變開發(fā)思維去找尋一些比較新穎的解決方案可能會有意外的收獲。同時技術(shù)不能脫離于業(yè)務(wù),技術(shù)賦能業(yè)務(wù)才能創(chuàng)造價值。

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

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

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

這種方式創(chuàng)建的列表存在一個問題:對于那些長列表或者需要較昂貴渲染開銷的子組件,即使還沒有出現(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是否滑動到了底部,再進(jìn)行上拉加載

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

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

NotificationListener有一個onNotification屬性,定義了監(jiān)聽的回調(diào)方法,通過它來處理加載更多邏輯

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

當(dāng)前標(biāo)題:flutter滾動嵌套,flutter多層嵌套滑動
文章起源:http://chinadenli.net/article19/dsehddh.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名靜態(tài)網(wǎng)站商城網(wǎng)站定制網(wǎng)站做網(wǎng)站微信小程序

廣告

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

成都做網(wǎng)站