Fultter NestedScrollView實(shí)現(xiàn)吸頂效果以及遇到問題解析
1、如何利用NestedScrollView 進(jìn)行吸頂效果?
在Flutter中,你可以使用NestedScrollView和SliverAppBar來實(shí)現(xiàn)吸頂效果。以下是我們常常在搜索里面搜索到的類型模版,來使用NestedScrollView以到達(dá)實(shí)現(xiàn)吸頂效果的步驟:
@override Widget build(BuildContext context) { return Scaffold( body: NestedScrollView( // 配置可折疊的頭布局 headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { // 在這里創(chuàng)建你的SliverAppBar return [ SliverAppBar( // 設(shè)置吸頂效果的屬性 // 設(shè)置為true以啟用吸頂效果 pinned: true, // 其他屬性設(shè)置 ), ]; }, //頁面的主體內(nèi)容 body: SingleChildScrollView( ... ), ), ); }
2、我們采用這樣的方式去寫的時候會發(fā)生什么問題?
以及如何一步步去解決問題
在我們使用會出現(xiàn)body被header遮擋的問題。 導(dǎo)致滑動到頂部我們的body 在有一部分展示不全。如下圖:
發(fā)生以上的原因是因為NestedScrollView滑動的時候他無法預(yù)支header的高度問題,所以我們使用“SliverOverlapAbsorber+ SliverOverlapInjector”來解決問題,這兩個小部件是在處理header和body之間的重疊問題時被使用到。
Widget build(BuildContext context) { return Scaffold( body: NestedScrollView( headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ SliverOverlapAbsorber( handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), sliver: SliverAppBar( pinned: true, // 其他屬性設(shè)置 ), ), ]; }, body: Builder( builder: (BuildContext context) { return CustomScrollView( slivers: [ SliverOverlapInjector( handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context), ), ... ], ); }, ), ), ); }
3、注意事項
使用這個我們會發(fā)現(xiàn)如何只有一個header的時候,一般問題就會被解決。但是我們有多個header怎么辦呢?在測試的過程中發(fā)現(xiàn)雖然返回的是一個數(shù)組,但是數(shù)組里面我們只能使用一個 ”SliverOverlapAbsorber“ 去監(jiān)聽,如果寫入多個SliverOverlapAbsorber會造成嚴(yán)重的卡頓,最終大概率會發(fā)生死機(jī)的情況,如何去解決這個問題,我們可以使用一下倆種方式:
3.1 使用 sliver_tools
這個插件,允許將多個sliver分組在一起以便它們可以作為單個小部件返回。
@override Widget build(BuildContext context) { return MultiSliver( pushPinnedChildren: false, // defaults to false children: <Widget>[ SliverPersistentHeader(...), SliverList(...), ], ); }
3.2 使用SliverMainAxisGroup
此小部件實(shí)現(xiàn)了在單個 ScrollView 中逐個放置條的功能,所有sliver都在組本身的邊界內(nèi)繪制(即 SliverPercientHeaders 不會在所有sliver提供的滾動范圍之外繪制)
具體的文檔說明大家可以點(diǎn)擊查看 https://docs.google.com/document/d/1e2bdLSYV_Dq2h8aHpF8mda67a...
使用以上倆種方式我們能很好的解決NestedScrollView 滾動吸頂。但是第二次方式對于flutter 的版本要求比較高喲。
以上就是Fultter NestedScrollView實(shí)現(xiàn)吸頂效果以及遇到問題解析的詳細(xì)內(nèi)容,更多關(guān)于Fultter NestedScrollView吸頂效果的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android 5.1 WebView內(nèi)存泄漏問題及快速解決方法
下面小編就為大家?guī)硪黄狝ndroid 5.1 WebView內(nèi)存泄漏問題及快速解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05Android 使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn)
本文給大家分享android使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn),感興趣的朋友一起學(xué)習(xí)吧2015-11-11Android提醒微技巧你真的了解Dialog、Toast和Snackbar嗎
這篇文章主要介紹了Android提醒微技巧你真的了解Dialog、Toast和Snackbar嗎的相關(guān)資料,需要的朋友可以參考下2016-07-07在Android上實(shí)現(xiàn)HttpServer的示例代碼
本篇文章主要介紹了在Android上實(shí)現(xiàn)HttpServer的示例代碼,實(shí)現(xiàn)Android本地的微型服務(wù)器,具有一定的參考價值,有興趣的可以了解一下2017-08-08Android?Banner本地和網(wǎng)絡(luò)輪播圖使用介紹
大家好,本篇文章講的是Android?Banner本地和網(wǎng)絡(luò)輪播圖使用介紹,感興趣的同學(xué)趕快來看一看吧,希望本篇文章對你起到幫助2021-11-11Ubuntu16.04 LTS 下安裝 Android Studio 2.2.2 的詳細(xì)步驟
這篇文章主要介紹了Ubuntu16.04 LTS 下安裝 Android Studio 2.2.2 的詳細(xì)步驟,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-11-11