// 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_api_samples/widgets/sliver/pinned_header_sliver.1.dart' as example; import 'package:flutter_test/flutter_test.dart'; void main() { testWidgets('PinnedHeaderSliver iOS Settings example', (WidgetTester tester) async { await tester.pumpWidget(const example.SettingsAppBarApp()); // Verify that the app contains a header: a SliverPersistentHeader // with an AnimatedOpacity widget below it, and a Text('Settings') below that. expect(find.byType(PinnedHeaderSliver), findsOneWidget); expect( find.descendant(of: find.byType(PinnedHeaderSliver), matching: find.byType(AnimatedOpacity)), findsOneWidget, ); expect(find.widgetWithText(AnimatedOpacity, 'Settings'), findsOneWidget); // Verify that the app contains a "Settings" title: a SliverToBoxAdapter // with a Text('Settings') widget below it. expect(find.widgetWithText(SliverToBoxAdapter, 'Settings'), findsOneWidget); final Finder headerOpacity = find.widgetWithText(AnimatedOpacity, 'Settings'); expect(tester.widget(headerOpacity).opacity, 0); // Scroll up: the header's opacity goes to 1 and the title disappears. await tester.timedDrag( find.byType(CustomScrollView), const Offset(0, -500), const Duration(milliseconds: 500), ); await tester.pumpAndSettle(); expect(tester.widget(headerOpacity).opacity, 1); expect(find.widgetWithText(SliverToBoxAdapter, 'Settings'), findsNothing); // Scroll back down and we're back to where we started. await tester.timedDrag( find.byType(CustomScrollView), const Offset(0, 500), const Duration(milliseconds: 500), ); await tester.pumpAndSettle(); expect(tester.widget(headerOpacity).opacity, 0); expect(find.widgetWithText(SliverToBoxAdapter, 'Settings'), findsOneWidget); }); }