anchor.diff:      if (!_isActive || _fadePerformance.isAnimating)
         return;
   
  -    _dragUnderway = false;
  -    if (_fadePerformance.isCompleted) {
  -      _startResizePerformance();
  -    } else if (_isFlingGesture(velocity)) {
  -      double flingVelocity = _directionIsYAxis ? velocity.dy : velocity.dx;
  -      _dragExtent = flingVelocity.sign;
  -      _fadePerformance.fling(velocity: flingVelocity.abs() * _kFlingVelocityScale);
  -    } else {
  -      _fadePerformance.reverse();
  -    }
  +    setState(() {
  +      _dragUnderway = false;
  +      if (_fadePerformance.isCompleted) {
  +        _startResizePerformance();
  +      } else if (_isFlingGesture(velocity)) {
  +        double flingVelocity = _directionIsYAxis ? velocity.dy : velocity.dx;
  +        _dragExtent = flingVelocity.sign;
  +        _fadePerformance.fling(velocity: flingVelocity.abs() * _kFlingVelocityScale);
  +      } else {
  +        _fadePerformance.reverse();
  +      }
  +    });
     }
   
     void _handleSizeChanged(Size newSize) {
       setState(() {
         _size = new Size.copy(newSize);
       });
  +  }
  +
  +  Point get _activeCardDragEndPoint {
  +    if (!_isActive)
  +      return Point.origin;
  +    assert(_size != null);
  +    double extent = _directionIsYAxis ? _size.height : _size.width;
  +    return new Point(_dragExtent.sign * extent * _kDismissCardThreshold, 0.0);
     }
   
     Widget build() {
  
positive.code:   void _handleDragStart() {
      if (_fadePerformance.isAnimating)
        return;
      _dragUnderway = true;
      _dragExtent = 0.0;
      _fadePerformance.progress = 0.0;
    }
  
    void _handleDragUpdate(double scrollOffset) {
  
negative.code:       _startResizePerformance();
    }
  
    bool get _isActive {
      return _size != null && (_dragUnderway || _fadePerformance.isAnimating);
    }
  