diff --git a/packages/flutter/lib/src/gestures/recognizer.dart b/packages/flutter/lib/src/gestures/recognizer.dart index 4705e4c611..bdc081a16a 100644 --- a/packages/flutter/lib/src/gestures/recognizer.dart +++ b/packages/flutter/lib/src/gestures/recognizer.dart @@ -12,7 +12,9 @@ import 'package:sky/src/gestures/pointer_router.dart'; export 'package:sky/src/gestures/pointer_router.dart' show PointerRouter; abstract class GestureRecognizer extends GestureArenaMember { - GestureRecognizer({ PointerRouter router }) : _router = router; + GestureRecognizer({ PointerRouter router }) : _router = router { + assert(_router != null); + } PointerRouter _router; diff --git a/packages/flutter/lib/src/widgets/gesture_detector.dart b/packages/flutter/lib/src/widgets/gesture_detector.dart index 88cacddbbf..cc1d35376a 100644 --- a/packages/flutter/lib/src/widgets/gesture_detector.dart +++ b/packages/flutter/lib/src/widgets/gesture_detector.dart @@ -190,7 +190,7 @@ class GestureDetectorState extends State { void _syncScale() { if (config.onScaleStart == null && config.onScaleUpdate == null && config.onScaleEnd == null) { - _scale = _ensureDisposed(_pan); + _scale = _ensureDisposed(_scale); } else { _ensureScale() ..onStart = config.onScaleStart diff --git a/packages/unit/test/widget/fractionally_sized_box_test.dart b/packages/unit/test/widget/fractionally_sized_box_test.dart index 4343f5a950..6ab3d21d5d 100644 --- a/packages/unit/test/widget/fractionally_sized_box_test.dart +++ b/packages/unit/test/widget/fractionally_sized_box_test.dart @@ -1,3 +1,4 @@ +import 'package:sky/rendering.dart'; import 'package:sky/widgets.dart'; import 'package:test/test.dart'; @@ -29,7 +30,8 @@ void main() { ) )); 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))); }); }); } diff --git a/packages/unit/test/widget/gesture_detector_test.dart b/packages/unit/test/widget/gesture_detector_test.dart index 26d45ecc08..206b8e866f 100644 --- a/packages/unit/test/widget/gesture_detector_test.dart +++ b/packages/unit/test/widget/gesture_detector_test.dart @@ -88,4 +88,38 @@ void main() { 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); + }); + }); } diff --git a/packages/unit/test/widget/widget_tester.dart b/packages/unit/test/widget/widget_tester.dart index 465a14094e..cf8f127ee1 100644 --- a/packages/unit/test/widget/widget_tester.dart +++ b/packages/unit/test/widget/widget_tester.dart @@ -145,7 +145,10 @@ class WidgetTester { } 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; TestPointer p = new TestPointer(pointer); // Events for the entire press-drag-release gesture are dispatched