Merge pull request #1468 from abarth/pan_crash
Detecting just Pan events causes an exception in GestureDetector
This commit is contained in:
commit
8faa778952
@ -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
|
||||
|
@ -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)));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user