diff --git a/packages/flutter/lib/src/widgets/sliver_persistent_header.dart b/packages/flutter/lib/src/widgets/sliver_persistent_header.dart index eb1659791cb..754f493391c 100644 --- a/packages/flutter/lib/src/widgets/sliver_persistent_header.dart +++ b/packages/flutter/lib/src/widgets/sliver_persistent_header.dart @@ -402,6 +402,11 @@ class _SliverScrollingPersistentHeader extends _SliverPersistentHeaderRenderObje stretchConfiguration: delegate.stretchConfiguration, ); } + + @override + void updateRenderObject(BuildContext context, covariant _RenderSliverScrollingPersistentHeaderForWidgets renderObject) { + renderObject.stretchConfiguration = delegate.stretchConfiguration; + } } class _RenderSliverScrollingPersistentHeaderForWidgets extends RenderSliverScrollingPersistentHeader diff --git a/packages/flutter/test/widgets/sliver_persistent_header_test.dart b/packages/flutter/test/widgets/sliver_persistent_header_test.dart new file mode 100644 index 00000000000..fe30f1e3b13 --- /dev/null +++ b/packages/flutter/test/widgets/sliver_persistent_header_test.dart @@ -0,0 +1,63 @@ +// Copyright 2014 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; +import 'package:flutter/src/rendering/sliver_persistent_header.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + testWidgets( + '_SliverScrollingPersistentHeader should update stretchConfiguration', + (WidgetTester tester) async { + for (final double stretchTriggerOffset in [10.0, 20.0]) { + await tester.pumpWidget(MaterialApp( + home: CustomScrollView( + slivers: [ + SliverPersistentHeader( + delegate: TestDelegate( + stretchConfiguration: OverScrollHeaderStretchConfiguration( + stretchTriggerOffset: stretchTriggerOffset, + ), + ), + ) + ], + ), + )); + } + + expect( + tester.allWidgets.where((Widget w) => + w.runtimeType.toString() == '_SliverScrollingPersistentHeader'), + isNotEmpty); + + final RenderSliverScrollingPersistentHeader render = tester.allRenderObjects + .whereType() + .first; + expect(render.stretchConfiguration?.stretchTriggerOffset, 20); + }); +} + +class TestDelegate extends SliverPersistentHeaderDelegate { + TestDelegate({this.stretchConfiguration, this.showOnScreenConfiguration}); + + @override + double get maxExtent => 200.0; + + @override + double get minExtent => 200.0; + + @override + Widget build( + BuildContext context, double shrinkOffset, bool overlapsContent) { + return Container(height: maxExtent); + } + + @override + bool shouldRebuild(TestDelegate oldDelegate) => false; + + @override + final OverScrollHeaderStretchConfiguration? stretchConfiguration; + @override + final PersistentHeaderShowOnScreenConfiguration? showOnScreenConfiguration; +}