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、我們采用這樣的方式去寫的時(shí)候會發(fā)生什么問題?
以及如何一步步去解決問題
在我們使用會出現(xiàn)body被header遮擋的問題。 導(dǎo)致滑動到頂部我們的body 在有一部分展示不全。如下圖:

發(fā)生以上的原因是因?yàn)镹estedScrollView滑動的時(shí)候他無法預(yù)支header的高度問題,所以我們使用“SliverOverlapAbsorber+ SliverOverlapInjector”來解決問題,這兩個(gè)小部件是在處理header和body之間的重疊問題時(shí)被使用到。
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、注意事項(xiàng)
使用這個(gè)我們會發(fā)現(xiàn)如何只有一個(gè)header的時(shí)候,一般問題就會被解決。但是我們有多個(gè)header怎么辦呢?在測試的過程中發(fā)現(xiàn)雖然返回的是一個(gè)數(shù)組,但是數(shù)組里面我們只能使用一個(gè) ”SliverOverlapAbsorber“ 去監(jiān)聽,如果寫入多個(gè)SliverOverlapAbsorber會造成嚴(yán)重的卡頓,最終大概率會發(fā)生死機(jī)的情況,如何去解決這個(gè)問題,我們可以使用一下倆種方式:
3.1 使用 sliver_tools
這個(gè)插件,允許將多個(gè)sliver分組在一起以便它們可以作為單個(gè)小部件返回。
@override
Widget build(BuildContext context) {
return MultiSliver(
pushPinnedChildren: false, // defaults to false
children: <Widget>[
SliverPersistentHeader(...),
SliverList(...),
],
);
}3.2 使用SliverMainAxisGroup
此小部件實(shí)現(xiàn)了在單個(gè) ScrollView 中逐個(gè)放置條的功能,所有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)存泄漏問題及快速解決方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
Android 使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn)
本文給大家分享android使用 ViewPager循環(huán)廣告位的實(shí)現(xiàn),感興趣的朋友一起學(xué)習(xí)吧2015-11-11
Android提醒微技巧你真的了解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ù)器,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Android?Banner本地和網(wǎng)絡(luò)輪播圖使用介紹
大家好,本篇文章講的是Android?Banner本地和網(wǎng)絡(luò)輪播圖使用介紹,感興趣的同學(xué)趕快來看一看吧,希望本篇文章對你起到幫助2021-11-11
Ubuntu16.04 LTS 下安裝 Android Studio 2.2.2 的詳細(xì)步驟
這篇文章主要介紹了Ubuntu16.04 LTS 下安裝 Android Studio 2.2.2 的詳細(xì)步驟,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11

