anchor.diff:    }
   
     int _activeCardIndex = -1;
  -  double _activeCardAnchorX;
     AnimationPerformance _activeCardAnimation;
     double _activeCardWidth;
  +  double _activeCardDragX = 0.0;
     bool _activeCardDragUnderway = false;
     Set<int> _dismissedCardIndices = new Set<int>();
   
     double get _activeCardOpacity => 1.0 - _activeCardAnimation.progress;
   
     double get _activeCardOffset {
  -    return _activeCardAnimation.progress * _activeCardWidth * _kDismissCardThreshold;
  +    return _activeCardAnimation.progress * _activeCardDragX.sign * _activeCardWidth * _kDismissCardThreshold;
     }
   
     void _handleAnimationProgressChanged(_) {
  
positive.code:     if (_activeCardWidth == null || _activeCardIndex < 0)
        return;
  
      if (_activeCardAnchorX == null)
        _activeCardAnchorX = event.x - event.dx;
  
      setState(() {
        double eventOffsetX = event.x - _activeCardAnchorX;
        if (!_activeCardAnimation.isAnimating)
          _activeCardAnimation.progress = eventOffsetX / (_activeCardWidth * _kDismissCardThreshold);
      });
    }
  
  
negative.code:     setState(() {
        _activeCardIndex = cardIndex;
        _activeCardDragUnderway = true;
        _activeCardDragX = 0.0;
        _activeCardAnimation.progress = 0.0;
      });
    }
  