11import 'package:flutter/material.dart' ;
2+
23class 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