Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.

Commit fa2d770

Browse files
authored
Fix SliverScrollingPersistentHeader not able to update stretchConfiguration (#112042)
1 parent 1fbd7ec commit fa2d770

File tree

2 files changed

+68
-0
lines changed

2 files changed

+68
-0
lines changed

packages/flutter/lib/src/widgets/sliver_persistent_header.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,11 @@ class _SliverScrollingPersistentHeader extends _SliverPersistentHeaderRenderObje
402402
stretchConfiguration: delegate.stretchConfiguration,
403403
);
404404
}
405+
406+
@override
407+
void updateRenderObject(BuildContext context, covariant _RenderSliverScrollingPersistentHeaderForWidgets renderObject) {
408+
renderObject.stretchConfiguration = delegate.stretchConfiguration;
409+
}
405410
}
406411

407412
class _RenderSliverScrollingPersistentHeaderForWidgets extends RenderSliverScrollingPersistentHeader
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
// Copyright 2014 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:flutter/material.dart';
6+
import 'package:flutter/src/rendering/sliver_persistent_header.dart';
7+
import 'package:flutter_test/flutter_test.dart';
8+
9+
void main() {
10+
testWidgets(
11+
'_SliverScrollingPersistentHeader should update stretchConfiguration',
12+
(WidgetTester tester) async {
13+
for (final double stretchTriggerOffset in <double>[10.0, 20.0]) {
14+
await tester.pumpWidget(MaterialApp(
15+
home: CustomScrollView(
16+
slivers: <Widget>[
17+
SliverPersistentHeader(
18+
delegate: TestDelegate(
19+
stretchConfiguration: OverScrollHeaderStretchConfiguration(
20+
stretchTriggerOffset: stretchTriggerOffset,
21+
),
22+
),
23+
)
24+
],
25+
),
26+
));
27+
}
28+
29+
expect(
30+
tester.allWidgets.where((Widget w) =>
31+
w.runtimeType.toString() == '_SliverScrollingPersistentHeader'),
32+
isNotEmpty);
33+
34+
final RenderSliverScrollingPersistentHeader render = tester.allRenderObjects
35+
.whereType<RenderSliverScrollingPersistentHeader>()
36+
.first;
37+
expect(render.stretchConfiguration?.stretchTriggerOffset, 20);
38+
});
39+
}
40+
41+
class TestDelegate extends SliverPersistentHeaderDelegate {
42+
TestDelegate({this.stretchConfiguration, this.showOnScreenConfiguration});
43+
44+
@override
45+
double get maxExtent => 200.0;
46+
47+
@override
48+
double get minExtent => 200.0;
49+
50+
@override
51+
Widget build(
52+
BuildContext context, double shrinkOffset, bool overlapsContent) {
53+
return Container(height: maxExtent);
54+
}
55+
56+
@override
57+
bool shouldRebuild(TestDelegate oldDelegate) => false;
58+
59+
@override
60+
final OverScrollHeaderStretchConfiguration? stretchConfiguration;
61+
@override
62+
final PersistentHeaderShowOnScreenConfiguration? showOnScreenConfiguration;
63+
}

0 commit comments

Comments
 (0)