| // 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/scroll_position/is_scrolling_listener.0.dart' as example; |
| import 'package:flutter_test/flutter_test.dart'; |
| |
| void main() { |
| testWidgets('IsScrollingListenerApp smoke test', (WidgetTester tester) async { |
| await tester.pumpWidget( |
| const example.IsScrollingListenerApp(), |
| ); |
| |
| expect(find.byType(CustomScrollView), findsOneWidget); |
| expect(find.byType(Scrollbar), findsOneWidget); |
| |
| ScrollPosition getScrollPosition() { |
| return tester.widget<CustomScrollView>(find.byType(CustomScrollView)).controller!.position; |
| } |
| |
| // Viewport is 600 pixels high, each item's height is 100, 6 items are visible. |
| expect(getScrollPosition().viewportDimension, 600); |
| expect(getScrollPosition().pixels, 0); |
| expect(find.text('Item 0'), findsOneWidget); |
| expect(find.text('Item 5'), findsOneWidget); |
| |
| // Small (< 100) scrolls don't trigger an auto-scroll |
| await tester.drag(find.byType(Scrollbar), const Offset(0, -20.0)); |
| await tester.pumpAndSettle(); |
| expect(getScrollPosition().pixels, 20); |
| expect(find.text('Item 0'), findsOneWidget); |
| |
| // Initial scroll is to 220: items 0,1 are scrolled off the top, |
| // the bottom 80 pixels of item 2 are visible, items 4-7 are |
| // completely visible, the first 20 pixels of item 8 are visible. |
| // After the auto-scroll, items 3-8 are completely visible. |
| await tester.drag(find.byType(Scrollbar), const Offset(0, -200.0)); |
| await tester.pumpAndSettle(); |
| expect(getScrollPosition().pixels, 300); |
| expect(find.text('Item 0'), findsNothing); |
| expect(find.text('Item 2'), findsNothing); |
| expect(find.text('Item 3'), findsOneWidget); |
| expect(find.text('Item 8'), findsOneWidget); |
| }); |
| } |