// 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/widgets.dart'; const List<int> items = <int>[0, 1, 2, 3, 4, 5]; Widget buildFrame() { return Directionality( textDirection: TextDirection.ltr, child: ListView( itemExtent: 290.0, scrollDirection: Axis.vertical, children: items.map<Widget>((int item) { return Container( child: Text('$item'), ); }).toList(), ), ); } void main() { testWidgets('Drag vertically', (WidgetTester tester) async { await tester.pumpWidget(buildFrame()); await tester.pump(); await tester.drag(find.text('1'), const Offset(0.0, -300.0)); await tester.pump(); // screen is 600px high, and has the following items: // -10..280 = 1 // 280..570 = 2 // 570..860 = 3 expect(find.text('0'), findsNothing); expect(find.text('1'), findsOneWidget); expect(find.text('2'), findsOneWidget); expect(find.text('3'), findsOneWidget); expect(find.text('4'), findsNothing); expect(find.text('5'), findsNothing); await tester.pump(); await tester.drag(find.text('2'), const Offset(0.0, -290.0)); await tester.pump(); // screen is 600px high, and has the following items: // -10..280 = 2 // 280..570 = 3 // 570..860 = 4 expect(find.text('0'), findsNothing); expect(find.text('1'), findsNothing); expect(find.text('2'), findsOneWidget); expect(find.text('3'), findsOneWidget); expect(find.text('4'), findsOneWidget); expect(find.text('5'), findsNothing); await tester.pump(); await tester.drag(find.text('3'), const Offset(-300.0, 0.0)); await tester.pump(); // nothing should have changed expect(find.text('0'), findsNothing); expect(find.text('1'), findsNothing); expect(find.text('2'), findsOneWidget); expect(find.text('3'), findsOneWidget); expect(find.text('4'), findsOneWidget); expect(find.text('5'), findsNothing); }); testWidgets('Drag vertically', (WidgetTester tester) async { await tester.pumpWidget( Directionality( textDirection: TextDirection.ltr, child: ListView( itemExtent: 290.0, padding: const EdgeInsets.only(top: 250.0), scrollDirection: Axis.vertical, children: items.map<Widget>((int item) { return Container( child: Text('$item'), ); }).toList(), ), ), ); await tester.pump(); // screen is 600px high, and has the following items: // 250..540 = 0 // 540..830 = 1 expect(find.text('0'), findsOneWidget); expect(find.text('1'), findsOneWidget); expect(find.text('2'), findsNothing); expect(find.text('3'), findsNothing); expect(find.text('4'), findsNothing); expect(find.text('5'), findsNothing); await tester.drag(find.text('0'), const Offset(0.0, -300.0)); await tester.pump(); // screen is 600px high, and has the following items: // -50..240 = 0 // 240..530 = 1 // 530..820 = 2 expect(find.text('0'), findsOneWidget); expect(find.text('1'), findsOneWidget); expect(find.text('2'), findsOneWidget); expect(find.text('3'), findsNothing); expect(find.text('4'), findsNothing); expect(find.text('5'), findsNothing); }); }