| // Copyright 2015 The Chromium 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_test/flutter_test.dart'; |
| import 'package:flutter/gestures.dart'; |
| import 'package:flutter/widgets.dart'; |
| |
| void main() { |
| testWidgets('Scroll notification basics', (WidgetTester tester) async { |
| ScrollNotification notification; |
| |
| await tester.pumpWidget(new NotificationListener<ScrollNotification>( |
| onNotification: (ScrollNotification value) { |
| if (value is ScrollStartNotification || value is ScrollUpdateNotification || value is ScrollEndNotification) |
| notification = value; |
| return false; |
| }, |
| child: new SingleChildScrollView( |
| child: const SizedBox(height: 1200.0) |
| ) |
| )); |
| |
| final TestGesture gesture = await tester.startGesture(const Offset(100.0, 100.0)); |
| await tester.pump(const Duration(seconds: 1)); |
| expect(notification, const isInstanceOf<ScrollStartNotification>()); |
| expect(notification.depth, equals(0)); |
| final ScrollStartNotification start = notification; |
| expect(start.dragDetails, isNotNull); |
| expect(start.dragDetails.globalPosition, equals(const Offset(100.0, 100.0))); |
| |
| await gesture.moveBy(const Offset(-10.0, -10.0)); |
| await tester.pump(const Duration(seconds: 1)); |
| expect(notification, const isInstanceOf<ScrollUpdateNotification>()); |
| expect(notification.depth, equals(0)); |
| final ScrollUpdateNotification update = notification; |
| expect(update.dragDetails, isNotNull); |
| expect(update.dragDetails.globalPosition, equals(const Offset(90.0, 90.0))); |
| expect(update.dragDetails.delta, equals(const Offset(0.0, -10.0))); |
| |
| await gesture.up(); |
| await tester.pump(const Duration(seconds: 1)); |
| expect(notification, const isInstanceOf<ScrollEndNotification>()); |
| expect(notification.depth, equals(0)); |
| final ScrollEndNotification end = notification; |
| expect(end.dragDetails, isNotNull); |
| expect(end.dragDetails.velocity, equals(Velocity.zero)); |
| }); |
| |
| testWidgets('Scroll notification depth', (WidgetTester tester) async { |
| final List<Type> depth0Types = <Type>[]; |
| final List<Type> depth1Types = <Type>[]; |
| final List<int> depth0Values = <int>[]; |
| final List<int> depth1Values = <int>[]; |
| |
| await tester.pumpWidget(new NotificationListener<ScrollNotification>( |
| onNotification: (ScrollNotification value) { |
| depth1Types.add(value.runtimeType); |
| depth1Values.add(value.depth); |
| return false; |
| }, |
| child: new SingleChildScrollView( |
| child: new SizedBox( |
| height: 1200.0, |
| child: new NotificationListener<ScrollNotification>( |
| onNotification: (ScrollNotification value) { |
| depth0Types.add(value.runtimeType); |
| depth0Values.add(value.depth); |
| return false; |
| }, |
| child: new Container( |
| padding: const EdgeInsets.all(50.0), |
| child: new SingleChildScrollView(child: const SizedBox(height: 1200.0)) |
| ) |
| ) |
| ) |
| ) |
| )); |
| |
| final TestGesture gesture = await tester.startGesture(const Offset(100.0, 100.0)); |
| await tester.pump(const Duration(seconds: 1)); |
| await gesture.moveBy(const Offset(-10.0, -40.0)); |
| await tester.pump(const Duration(seconds: 1)); |
| await gesture.up(); |
| await tester.pump(const Duration(seconds: 1)); |
| |
| final List<Type> types = <Type>[ |
| ScrollStartNotification, |
| UserScrollNotification, |
| ScrollUpdateNotification, |
| ScrollEndNotification, |
| UserScrollNotification, |
| ]; |
| expect(depth0Types, equals(types)); |
| expect(depth1Types, equals(types)); |
| |
| expect(depth0Values, equals(<int>[0, 0, 0, 0, 0])); |
| expect(depth1Values, equals(<int>[1, 1, 1, 1, 1])); |
| }); |
| } |