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