anchor.diff:    }
   
     void _handleDragEnd(Offset velocity) {
  -    if (velocity != Offset.zero) {
  -      _startToEndAnimation(velocity: _scrollVelocity(velocity));
  -    } else if (!_toEndAnimation.isAnimating && (_toOffsetAnimation == null || !_toOffsetAnimation.isAnimating)) {
  -      settleScrollOffset();
  -    }
  +    fling(velocity);
     }
   
     final List<ScrollListener> _listeners = new List<ScrollListener>();
  
positive.code:     return scrollTo(newScrollOffset, duration: duration, curve: curve);
    }
  
    void settleScrollOffset() {
      _startToEndAnimation();
    }
  
negative.code:       .clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset);
    }
  
    void fling(sky.Offset velocity) {
      double scrollVelocity = _scrollVelocity(velocity);
      double newScrollOffset = _snapScrollOffset(scrollOffset + scrollVelocity.sign * itemExtent)
        .clamp(_snapScrollOffset(scrollOffset - itemExtent / 2.0),
  