anchor.diff:      bool wasAccepted = (_state == DragState.accepted);
       _state = DragState.ready;
       if (wasAccepted && onEnd != null) {
  -      ui.GestureVelocity gestureVelocity = _velocityTracker.getVelocity(pointer);
  +      ui.VelocityTracker tracker = _velocityTrackers[pointer];
  +      assert(tracker != null);
  +
  +      ui.GestureVelocity gestureVelocity = tracker.getVelocity();
         ui.Offset velocity = ui.Offset.zero;
         if (_isFlingGesture(gestureVelocity))
           velocity = new ui.Offset(gestureVelocity.x, gestureVelocity.y);
         onEnd(velocity);
       }
  -    _velocityTracker.reset();
  +    _velocityTrackers.clear();
     }
   
     void dispose() {
  -    _velocityTracker.reset();
  +    _velocityTrackers.clear();
       super.dispose();
     }
   }
  
positive.code:   void handleEvent(PointerInputEvent event) {
      assert(_state != DragState.ready);
      if (event.type == 'pointermove') {
        _velocityTracker.addPosition(_eventTime(event), event.pointer, event.x, event.y);
        T delta = _getDragDelta(event);
        if (_state == DragState.accepted) {
          if (onUpdate != null)
  
negative.code:   T _getDragDelta(PointerInputEvent event);
    bool get _hasSufficientPendingDragDeltaToAccept;
  
    Map<int, ui.VelocityTracker> _velocityTrackers = new Map<int, ui.VelocityTracker>();
  
    void addPointer(PointerInputEvent event) {
      startTrackingPointer(event.pointer);
      _velocityTrackers[event.pointer] = new ui.VelocityTracker();
      if (_state == DragState.ready) {
        _state = DragState.possible;
        _pendingDragDelta = _initialPendingDragDelta;
  