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:       color: color
      );
  
      if (index == _activeCardIndex && _activeCardOffset > 0.0) {
        Matrix4 transform = new Matrix4.identity();
        transform.translate(_activeCardOffset, 0.0);
        card = new Transform(child: card, transform: transform);
        if (_activeCardAnimation != null)
          card = new Opacity(child: card, opacity: _activeCardOpacity);
      }
  
      return new Listener(
        child: card,
        onPointerDown: (event) { _handlePointerDown(event, index); }
      );
    }
  
  
negative.code: 
      _activeCardDragUnderway = false;
      double velocityX = event.velocityX / 1000;
      if (velocityX.abs() >= _kMinCardFlingVelocity) {
        double distance = 1.0 - _activeCardAnimation.progress;
        if (distance > 0.0) {
          double duration = 150.0 * distance / velocityX.abs();
          _activeCardDragX = velocityX.sign;
          _activeCardAnimation.timeline.animateTo(1.0, duration);
        }
      }
    }
  
    Widget _buildCard(int index, Color color) {
  