mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00

This fixes an issue in the stocks app in horizontal mode where you could both scroll and drag the drawer at the same time.
92 lines
2.8 KiB
Dart
92 lines
2.8 KiB
Dart
import 'package:sky/widgets.dart';
|
|
import 'package:test/test.dart';
|
|
|
|
import '../engine/mock_events.dart';
|
|
import 'widget_tester.dart';
|
|
|
|
void main() {
|
|
test('Uncontested scrolls start immediately', () {
|
|
WidgetTester tester = new WidgetTester();
|
|
TestPointer pointer = new TestPointer(7);
|
|
|
|
bool didStartDrag = false;
|
|
double updatedDragDelta;
|
|
bool didEndDrag = false;
|
|
|
|
Widget builder() {
|
|
return new GestureDetector(
|
|
onVerticalDragStart: () {
|
|
didStartDrag = true;
|
|
},
|
|
onVerticalDragUpdate: (double scrollDelta) {
|
|
updatedDragDelta = scrollDelta;
|
|
},
|
|
onVerticalDragEnd: (Offset velocity) {
|
|
didEndDrag = true;
|
|
},
|
|
child: new Container()
|
|
);
|
|
}
|
|
|
|
tester.pumpFrame(builder);
|
|
expect(didStartDrag, isFalse);
|
|
expect(updatedDragDelta, isNull);
|
|
expect(didEndDrag, isFalse);
|
|
|
|
Point firstLocation = new Point(10.0, 10.0);
|
|
tester.dispatchEvent(pointer.down(firstLocation), firstLocation);
|
|
expect(didStartDrag, isTrue);
|
|
didStartDrag = false;
|
|
expect(updatedDragDelta, isNull);
|
|
expect(didEndDrag, isFalse);
|
|
|
|
Point secondLocation = new Point(10.0, 9.0);
|
|
tester.dispatchEvent(pointer.move(secondLocation), firstLocation);
|
|
expect(didStartDrag, isFalse);
|
|
expect(updatedDragDelta, -1.0);
|
|
updatedDragDelta = null;
|
|
expect(didEndDrag, isFalse);
|
|
|
|
tester.dispatchEvent(pointer.up(), firstLocation);
|
|
expect(didStartDrag, isFalse);
|
|
expect(updatedDragDelta, isNull);
|
|
expect(didEndDrag, isTrue);
|
|
didEndDrag = false;
|
|
|
|
tester.pumpFrame(() => new Container());
|
|
});
|
|
|
|
test('Match two scroll gestures in succession', () {
|
|
WidgetTester tester = new WidgetTester();
|
|
TestPointer pointer = new TestPointer(7);
|
|
|
|
int gestureCount = 0;
|
|
double dragDistance = 0.0;
|
|
|
|
Point downLocation = new Point(10.0, 10.0);
|
|
Point upLocation = new Point(10.0, 20.0);
|
|
|
|
Widget builder() {
|
|
return new GestureDetector(
|
|
onVerticalDragUpdate: (double delta) { dragDistance += delta; },
|
|
onVerticalDragEnd: (Offset velocity) { gestureCount += 1; },
|
|
onHorizontalDragUpdate: (_) { fail("gesture should not match"); },
|
|
onHorizontalDragEnd: (Offset velocity) { fail("gesture should not match"); },
|
|
child: new Container()
|
|
);
|
|
}
|
|
tester.pumpFrame(builder);
|
|
|
|
tester.dispatchEvent(pointer.down(downLocation), downLocation);
|
|
tester.dispatchEvent(pointer.move(upLocation), downLocation);
|
|
tester.dispatchEvent(pointer.up(), downLocation);
|
|
|
|
tester.dispatchEvent(pointer.down(downLocation), downLocation);
|
|
tester.dispatchEvent(pointer.move(upLocation), downLocation);
|
|
tester.dispatchEvent(pointer.up(), downLocation);
|
|
|
|
expect(gestureCount, 2);
|
|
expect(dragDistance, 20.0);
|
|
});
|
|
}
|