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';
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;
......
......@@ -190,7 +190,7 @@ class GestureDetectorState extends State<GestureDetector> {
void _syncScale() {
if (config.onScaleStart == null && config.onScaleUpdate == null && config.onScaleEnd == null) {
_scale = _ensureDisposed(_pan);
_scale = _ensureDisposed(_scale);
} else {
_ensureScale()
..onStart = config.onScaleStart
......
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)));
});
});
}
......@@ -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);
});
});
}
......@@ -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
......
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