Skip to content

Commit 97e09c8

Browse files
authored
Fix SliverPinnedPersistentHeader, also not able to update stretchConfiguration and showOnScreenConfiguration (#112043)
1 parent fa2d770 commit 97e09c8

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,13 @@ class _SliverPinnedPersistentHeader extends _SliverPersistentHeaderRenderObjectW
428428
showOnScreenConfiguration: delegate.showOnScreenConfiguration,
429429
);
430430
}
431+
432+
@override
433+
void updateRenderObject(BuildContext context, covariant _RenderSliverPinnedPersistentHeaderForWidgets renderObject) {
434+
renderObject
435+
..stretchConfiguration = delegate.stretchConfiguration
436+
..showOnScreenConfiguration = delegate.showOnScreenConfiguration;
437+
}
431438
}
432439

433440
class _RenderSliverPinnedPersistentHeaderForWidgets extends RenderSliverPinnedPersistentHeader

packages/flutter/test/widgets/sliver_persistent_header_test.dart

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,68 @@ void main() {
3636
.first;
3737
expect(render.stretchConfiguration?.stretchTriggerOffset, 20);
3838
});
39+
40+
testWidgets(
41+
'_SliverPinnedPersistentHeader should update stretchConfiguration',
42+
(WidgetTester tester) async {
43+
for (final double stretchTriggerOffset in <double>[10.0, 20.0]) {
44+
await tester.pumpWidget(MaterialApp(
45+
home: CustomScrollView(
46+
slivers: <Widget>[
47+
SliverPersistentHeader(
48+
pinned: true,
49+
delegate: TestDelegate(
50+
stretchConfiguration: OverScrollHeaderStretchConfiguration(
51+
stretchTriggerOffset: stretchTriggerOffset,
52+
),
53+
),
54+
)
55+
],
56+
),
57+
));
58+
}
59+
60+
expect(
61+
tester.allWidgets.where((Widget w) =>
62+
w.runtimeType.toString() == '_SliverPinnedPersistentHeader'),
63+
isNotEmpty);
64+
65+
final RenderSliverPinnedPersistentHeader render = tester.allRenderObjects
66+
.whereType<RenderSliverPinnedPersistentHeader>()
67+
.first;
68+
expect(render.stretchConfiguration?.stretchTriggerOffset, 20);
69+
});
70+
71+
testWidgets(
72+
'_SliverPinnedPersistentHeader should update showOnScreenConfiguration',
73+
(WidgetTester tester) async {
74+
for (final double maxShowOnScreenExtent in <double>[1000, 2000]) {
75+
await tester.pumpWidget(MaterialApp(
76+
home: CustomScrollView(
77+
slivers: <Widget>[
78+
SliverPersistentHeader(
79+
pinned: true,
80+
delegate: TestDelegate(
81+
showOnScreenConfiguration:
82+
PersistentHeaderShowOnScreenConfiguration(
83+
maxShowOnScreenExtent: maxShowOnScreenExtent),
84+
),
85+
)
86+
],
87+
),
88+
));
89+
}
90+
91+
expect(
92+
tester.allWidgets.where((Widget w) =>
93+
w.runtimeType.toString() == '_SliverPinnedPersistentHeader'),
94+
isNotEmpty);
95+
96+
final RenderSliverPinnedPersistentHeader render = tester.allRenderObjects
97+
.whereType<RenderSliverPinnedPersistentHeader>()
98+
.first;
99+
expect(render.showOnScreenConfiguration?.maxShowOnScreenExtent, 2000);
100+
});
39101
}
40102

41103
class TestDelegate extends SliverPersistentHeaderDelegate {

0 commit comments

Comments
 (0)