Skip to content

Commit 4f167b7

Browse files
committed
nestedScrollView with tabview
1 parent f2f1a8a commit 4f167b7

File tree

1 file changed

+38
-19
lines changed

1 file changed

+38
-19
lines changed

lib/widget_test/test_nested_scroll_view.dart

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
23
class TestNestedScrollView extends StatefulWidget {
34
const TestNestedScrollView({Key? key}) : super(key: key);
45

@@ -20,23 +21,36 @@ class _TestNestedScrollViewState extends State<TestNestedScrollView>
2021
@override
2122
Widget build(BuildContext context) {
2223
return Scaffold(
23-
body: CustomScrollView(
24-
slivers: [
25-
_buildAppbar(),
26-
_buildTabView(),
27-
],
24+
body: NestedScrollView(
25+
headerSliverBuilder: _buildHeader,
26+
body: TabBarView(
27+
controller: tabController,
28+
children: [
29+
buildScrollPage(Colors.redAccent),
30+
buildScrollPage(Colors.amberAccent)
31+
],
32+
),
2833
),
2934
);
3035
}
3136

37+
List<Widget> _buildHeader(BuildContext context, bool innerBoxIsScrolled) {
38+
return [
39+
SliverOverlapAbsorber(
40+
sliver: _buildAppbar(),
41+
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(context),
42+
),
43+
];
44+
}
45+
3246
Widget _buildAppbar() {
3347
return SliverAppBar(
3448
expandedHeight: 140,
3549
title: const Text('CustomScrollView 测试'),
3650
flexibleSpace: FlexibleSpaceBar(
3751
collapseMode: CollapseMode.pin,
3852
background:
39-
Image.asset('assets/image/pic.png', fit: BoxFit.cover)),
53+
Image.asset('assets/image/pic.png', fit: BoxFit.cover)),
4054
pinned: true,
4155
bottom: TabBar(
4256
controller: tabController,
@@ -58,16 +72,21 @@ class _TestNestedScrollViewState extends State<TestNestedScrollView>
5872
}
5973

6074
Widget buildScrollPage(Color color) {
61-
return CustomScrollView(
62-
slivers: [
63-
_buildBox(color),
64-
SliverPadding(
65-
padding: EdgeInsets.all(8),
66-
sliver: _buildSliverGrid(),
67-
),
68-
// _buildSliverGrid(),
69-
_buildSliverList(),
70-
],
75+
return Builder(
76+
builder: (ctx) => CustomScrollView(
77+
key: PageStorageKey<Color>(color),
78+
slivers: [
79+
SliverOverlapInjector( // tag1
80+
handle: NestedScrollView.sliverOverlapAbsorberHandleFor(ctx),
81+
),
82+
_buildBox(color),
83+
SliverPadding(
84+
padding: EdgeInsets.all(8),
85+
sliver: _buildSliverGrid(),
86+
),
87+
_buildSliverList(),
88+
],
89+
),
7190
);
7291
}
7392

@@ -85,9 +104,9 @@ class _TestNestedScrollViewState extends State<TestNestedScrollView>
85104
Widget _buildSliverList() {
86105
return SliverList(
87106
delegate: SliverChildBuilderDelegate(
88-
_buildItemByIndex,
89-
childCount: data.length,
90-
));
107+
_buildItemByIndex,
108+
childCount: data.length,
109+
));
91110
}
92111

93112
Widget _buildSliverGrid() {

0 commit comments

Comments
 (0)