mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
107 lines
3.9 KiB
Dart
107 lines
3.9 KiB
Dart
// 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/material.dart';
|
|
|
|
class TestDelegate extends LazyBlockDelegate {
|
|
@override
|
|
Widget buildItem(BuildContext context, int index) {
|
|
return new Text('$index');
|
|
}
|
|
|
|
@override
|
|
double estimateTotalExtent(int firstIndex, int lastIndex, double minOffset, double firstStartOffset, double lastEndOffset) {
|
|
return double.INFINITY;
|
|
}
|
|
|
|
@override
|
|
bool shouldRebuild(LazyBlockDelegate oldDelegate) => false;
|
|
}
|
|
|
|
double currentOffset;
|
|
|
|
Future<Null> pumpTest(WidgetTester tester, TargetPlatform platform) async {
|
|
await tester.pumpWidget(new Container());
|
|
await tester.pumpWidget(new MaterialApp(
|
|
theme: new ThemeData(
|
|
platform: platform
|
|
),
|
|
home: new LazyBlock(
|
|
delegate: new TestDelegate(),
|
|
onScroll: (double scrollOffset) { currentOffset = scrollOffset; },
|
|
),
|
|
));
|
|
return null;
|
|
}
|
|
|
|
const double dragOffset = 213.82;
|
|
|
|
void main() {
|
|
testWidgets('Flings on different platforms', (WidgetTester tester) async {
|
|
await pumpTest(tester, TargetPlatform.android);
|
|
await tester.fling(find.byType(LazyBlock), const Offset(0.0, -dragOffset), 1000.0);
|
|
expect(currentOffset, dragOffset);
|
|
await tester.pump(); // trigger fling
|
|
expect(currentOffset, dragOffset);
|
|
await tester.pump(const Duration(seconds: 5));
|
|
final double result1 = currentOffset;
|
|
|
|
await pumpTest(tester, TargetPlatform.iOS);
|
|
await tester.fling(find.byType(LazyBlock), const Offset(0.0, -dragOffset), 1000.0);
|
|
expect(currentOffset, dragOffset);
|
|
await tester.pump(); // trigger fling
|
|
expect(currentOffset, dragOffset);
|
|
await tester.pump(const Duration(seconds: 5));
|
|
final double result2 = currentOffset;
|
|
|
|
expect(result1, lessThan(result2)); // iOS (result2) is slipperier than Android (result1)
|
|
});
|
|
|
|
testWidgets('fling and tap to stop', (WidgetTester tester) async {
|
|
List<String> log = <String>[];
|
|
|
|
List<Widget> textWidgets = <Widget>[];
|
|
for (int i = 0; i < 250; i++)
|
|
textWidgets.add(new GestureDetector(onTap: () { log.add('tap $i'); }, child: new Text('$i')));
|
|
await tester.pumpWidget(new Block(children: textWidgets));
|
|
|
|
expect(log, equals(<String>[]));
|
|
await tester.tap(find.byType(Scrollable));
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18']));
|
|
await tester.fling(find.byType(Scrollable), new Offset(0.0, -200.0), 1000.0);
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18']));
|
|
await tester.tap(find.byType(Scrollable));
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18']));
|
|
await tester.tap(find.byType(Scrollable));
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18', 'tap 31']));
|
|
});
|
|
|
|
testWidgets('fling and wait and tap', (WidgetTester tester) async {
|
|
List<String> log = <String>[];
|
|
|
|
List<Widget> textWidgets = <Widget>[];
|
|
for (int i = 0; i < 250; i++)
|
|
textWidgets.add(new GestureDetector(onTap: () { log.add('tap $i'); }, child: new Text('$i')));
|
|
await tester.pumpWidget(new Block(children: textWidgets));
|
|
|
|
expect(log, equals(<String>[]));
|
|
await tester.tap(find.byType(Scrollable));
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18']));
|
|
await tester.fling(find.byType(Scrollable), new Offset(0.0, -200.0), 1000.0);
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18']));
|
|
await tester.pump(const Duration(seconds: 50));
|
|
expect(log, equals(<String>['tap 18']));
|
|
await tester.tap(find.byType(Scrollable));
|
|
await tester.pump(const Duration(milliseconds: 50));
|
|
expect(log, equals(<String>['tap 18', 'tap 43']));
|
|
});
|
|
}
|