Flutter用NestedScrollView 嵌套SliverAppBar,body用TabBarView如何解决头部不滑动问题
时间: 2024-03-12 17:49:56 浏览: 74
在Flutter中使用NestedScrollView 嵌套SliverAppBar,同时在body中使用TabBarView时,可能会遇到头部不滑动的问题,这是由于TabBarView默认会占据整个屏幕,并覆盖在SliverAppBar下方,导致SliverAppBar无法随着用户向下滑动而实现滑动效果。
为了解决这个问题,你可以使用CustomScrollView作为NestedScrollView的body,并将TabBarView作为CustomScrollView的slivers属性,这样TabBarView就会作为一个Sliver来嵌套在SliverAppBar下方,从而实现头部和列表的联动滑动效果。
例如,以下是一个嵌套SliverAppBar并使用TabBarView的示例代码:
```
DefaultTabController(
length: 2,
child: NestedScrollView(
headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) {
return <Widget>[
SliverAppBar(
floating: true,
snap: true,
title: Text('NestedScrollView Demo'),
expandedHeight: 200.0,
flexibleSpace: FlexibleSpaceBar(
background: Image.network(
'https://picsum.photos/200/300',
fit: BoxFit.cover,
),
),
bottom: TabBar(
tabs: <Widget>[
Tab(text: 'Tab 1'),
Tab(text: 'Tab 2'),
],
),
),
];
},
body: CustomScrollView(
slivers: <Widget>[
SliverFillRemaining(
child: TabBarView(
children: <Widget>[
ListView.builder(
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Tab 1 - Item $index'),
);
},
itemCount: 50,
),
ListView.builder(
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Tab 2 - Item $index'),
);
},
itemCount: 50,
),
],
),
),
],
),
),
);
```
在这个示例中,我们使用CustomScrollView作为NestedScrollView的body,并将TabBarView作为CustomScrollView的slivers属性,从而实现了头部和列表的联动滑动效果。同时,我们还使用了DefaultTabController来管理TabBar和TabBarView的联动效果。
阅读全文