// 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 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); }); testWidgets('_SliverPinnedPersistentHeader should update stretchConfiguration', ( WidgetTester tester, ) async { for (final stretchTriggerOffset in [10.0, 20.0]) { await tester.pumpWidget( MaterialApp( home: CustomScrollView( slivers: [ SliverPersistentHeader( pinned: true, delegate: TestDelegate( stretchConfiguration: OverScrollHeaderStretchConfiguration( stretchTriggerOffset: stretchTriggerOffset, ), ), ), ], ), ), ); } expect( tester.allWidgets.where( (Widget w) => w.runtimeType.toString() == '_SliverPinnedPersistentHeader', ), isNotEmpty, ); final RenderSliverPinnedPersistentHeader render = tester.allRenderObjects .whereType() .first; expect(render.stretchConfiguration?.stretchTriggerOffset, 20); }); testWidgets('_SliverPinnedPersistentHeader should update showOnScreenConfiguration', ( WidgetTester tester, ) async { for (final maxShowOnScreenExtent in [1000, 2000]) { await tester.pumpWidget( MaterialApp( home: CustomScrollView( slivers: [ SliverPersistentHeader( pinned: true, delegate: TestDelegate( showOnScreenConfiguration: PersistentHeaderShowOnScreenConfiguration( maxShowOnScreenExtent: maxShowOnScreenExtent, ), ), ), ], ), ), ); } expect( tester.allWidgets.where( (Widget w) => w.runtimeType.toString() == '_SliverPinnedPersistentHeader', ), isNotEmpty, ); final RenderSliverPinnedPersistentHeader render = tester.allRenderObjects .whereType() .first; expect(render.showOnScreenConfiguration?.maxShowOnScreenExtent, 2000); }); } 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; }