Commit 56c8e60b authored by Adam Barth's avatar Adam Barth

Detecting just Pan events causes an exception in GestureDetector

Fixes #1320
parent 6fcdb64a
...@@ -12,7 +12,9 @@ import 'package:sky/src/gestures/pointer_router.dart'; ...@@ -12,7 +12,9 @@ import 'package:sky/src/gestures/pointer_router.dart';
export 'package:sky/src/gestures/pointer_router.dart' show PointerRouter; export 'package:sky/src/gestures/pointer_router.dart' show PointerRouter;
abstract class GestureRecognizer extends GestureArenaMember { abstract class GestureRecognizer extends GestureArenaMember {
GestureRecognizer({ PointerRouter router }) : _router = router; GestureRecognizer({ PointerRouter router }) : _router = router {
assert(_router != null);
}
PointerRouter _router; PointerRouter _router;
......
...@@ -190,7 +190,7 @@ class GestureDetectorState extends State<GestureDetector> { ...@@ -190,7 +190,7 @@ class GestureDetectorState extends State<GestureDetector> {
void _syncScale() { void _syncScale() {
if (config.onScaleStart == null && config.onScaleUpdate == null && config.onScaleEnd == null) { if (config.onScaleStart == null && config.onScaleUpdate == null && config.onScaleEnd == null) {
_scale = _ensureDisposed(_pan); _scale = _ensureDisposed(_scale);
} else { } else {
_ensureScale() _ensureScale()
..onStart = config.onScaleStart ..onStart = config.onScaleStart
......
import 'package:sky/rendering.dart';
import 'package:sky/widgets.dart'; import 'package:sky/widgets.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
...@@ -29,7 +30,8 @@ void main() { ...@@ -29,7 +30,8 @@ void main() {
) )
)); ));
expect(detectedSize, equals(const Size(50.0, 25.0))); expect(detectedSize, equals(const Size(50.0, 25.0)));
expect(inner.currentContext.findRenderObject().localToGlobal(Point.origin), equals(const Point(25.0, 37.5))); RenderBox box = inner.currentContext.findRenderObject();
expect(box.localToGlobal(Point.origin), equals(const Point(25.0, 37.5)));
}); });
}); });
} }
...@@ -88,4 +88,38 @@ void main() { ...@@ -88,4 +88,38 @@ void main() {
tester.pumpWidget(new Container()); tester.pumpWidget(new Container());
}); });
}); });
test('Pan doesn\'t crash', () {
testWidgets((WidgetTester tester) {
bool didStartPan = false;
Offset panDelta;
bool didEndPan = false;
tester.pumpWidget(
new GestureDetector(
onPanStart: () {
didStartPan = true;
},
onPanUpdate: (Offset delta) {
panDelta = delta;
},
onPanEnd: (_) {
didEndPan = true;
},
child: new Container()
)
);
expect(didStartPan, isFalse);
expect(panDelta, isNull);
expect(didEndPan, isFalse);
tester.scrollAt(new Point(10.0, 10.0), new Offset(20.0, 30.0));
expect(didStartPan, isTrue);
expect(panDelta.dx, 20.0);
expect(panDelta.dy, 30.0);
expect(didEndPan, isTrue);
});
});
} }
...@@ -145,7 +145,10 @@ class WidgetTester { ...@@ -145,7 +145,10 @@ class WidgetTester {
} }
void scroll(Element element, Offset offset, { int pointer: 1 }) { void scroll(Element element, Offset offset, { int pointer: 1 }) {
Point startLocation = getCenter(element); scrollAt(getCenter(element), offset, pointer: pointer);
}
void scrollAt(Point startLocation, Offset offset, { int pointer: 1 }) {
Point endLocation = startLocation + offset; Point endLocation = startLocation + offset;
TestPointer p = new TestPointer(pointer); TestPointer p = new TestPointer(pointer);
// Events for the entire press-drag-release gesture are dispatched // Events for the entire press-drag-release gesture are dispatched
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment