mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
onScrollStart shouldn't have an offset
Instead, we pump a onScrollUpdate with the offset if there is an offset.
This commit is contained in:
parent
6a09a45848
commit
ab13ea240d
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user