onScrollStart shouldn't have an offset

Instead, we pump a onScrollUpdate with the offset if there is an offset.
This commit is contained in:
Adam Barth 2015-08-28 15:00:39 -07:00
parent 6a09a45848
commit ab13ea240d
3 changed files with 23 additions and 19 deletions

View File

@ -14,7 +14,7 @@ enum ScrollState {
accepted
}
typedef void GestureScrollStartCallback(sky.Offset scrollDelta);
typedef void GestureScrollStartCallback();
typedef void GestureScrollUpdateCallback(sky.Offset scrollDelta);
typedef void GestureScrollEndCallback();
@ -47,7 +47,8 @@ class ScrollGestureRecognizer extends GestureRecognizer {
if (event.type == 'pointermove') {
sky.Offset offset = _getScrollOffset(event);
if (state == ScrollState.accepted) {
onScrollUpdate(offset);
if (onScrollUpdate != null)
onScrollUpdate(offset);
} else {
pendingScrollOffset += offset;
if (pendingScrollOffset.distance > kTouchSlop)
@ -62,14 +63,17 @@ class ScrollGestureRecognizer extends GestureRecognizer {
state = ScrollState.accepted;
sky.Offset offset = pendingScrollOffset;
pendingScrollOffset = null;
onScrollStart(offset);
if (onScrollStart != null)
onScrollStart();
if (offset != sky.Offset.zero && onScrollUpdate != null)
onScrollUpdate(offset);
}
}
void didStopTrackingLastPointer() {
bool wasAccepted = (state == ScrollState.accepted);
state = ScrollState.ready;
if (wasAccepted)
bool wasAccepted = (state == ScrollState.accepted);
state = ScrollState.ready;
if (wasAccepted && onScrollEnd != null)
onScrollEnd();
}

View File

@ -84,8 +84,7 @@ abstract class Scrollable extends StatefulComponent {
Widget build() {
return new GestureDetector(
onScrollStart: _handleScrollOffset,
onScrollUpdate: _handleScrollOffset,
onScrollUpdate: _handleScrollUpdate,
onScrollEnd: _maybeSettleScrollOffset,
child: new Listener(
child: buildContent(),
@ -173,7 +172,7 @@ abstract class Scrollable extends StatefulComponent {
return EventDisposition.processed;
}
void _handleScrollOffset(Offset offset) {
void _handleScrollUpdate(Offset offset) {
scrollBy(scrollDirection == ScrollDirection.horizontal ? offset.dx : offset.dy);
}

View File

@ -43,9 +43,9 @@ void main() {
PointerRouter router = new PointerRouter();
ScrollGestureRecognizer scroll = new ScrollGestureRecognizer(router: router);
sky.Offset startOffset;
scroll.onScrollStart = (sky.Offset offset) {
startOffset = offset;
bool didStartScroll = false;
scroll.onScrollStart = () {
didStartScroll = true;
};
sky.Offset updateOffset;
@ -59,29 +59,30 @@ void main() {
};
scroll.addPointer(down);
expect(startOffset, isNull);
expect(didStartScroll, isFalse);
expect(updateOffset, isNull);
expect(didEndScroll, isFalse);
router.handleEvent(down, null);
expect(startOffset, isNull);
expect(didStartScroll, isFalse);
expect(updateOffset, isNull);
expect(didEndScroll, isFalse);
router.handleEvent(move1, null);
expect(startOffset, new sky.Offset(10.0, -10.0));
startOffset = null;
expect(updateOffset, isNull);
expect(didStartScroll, isTrue);
didStartScroll = false;
expect(updateOffset, new sky.Offset(10.0, -10.0));
updateOffset = null;
expect(didEndScroll, isFalse);
router.handleEvent(move2, null);
expect(startOffset, isNull);
expect(didStartScroll, isFalse);
expect(updateOffset, new sky.Offset(0.0, -5.0));
updateOffset = null;
expect(didEndScroll, isFalse);
router.handleEvent(up, null);
expect(startOffset, isNull);
expect(didStartScroll, isFalse);
expect(updateOffset, isNull);
expect(didEndScroll, isTrue);
didEndScroll = false;