anchor.diff:      return _history.length > 1 || _history[0].willHandlePopInternally;
     }
   
  +  /// Starts a gesture that results in popping the navigator.
     NavigationGestureController startPopGesture() {
       if (canPop())
         return _history.last.startPopGesture(this);
       return null;
     }
   
  +  /// Whether a gesture controlled by a [NavigationGestureController] is currently in progress.
  +  bool get userGestureInProgress => _userGestureInProgress;
     // TODO(mpcomplete): remove this bool when we fix
     // https://github.com/flutter/flutter/issues/5577
     bool _userGestureInProgress = false;
  -  bool get userGestureInProgress => _userGestureInProgress;
  -
  +
  +  /// The navigator is being controlled by a user gesture.
  +  ///
  +  /// Used for the iOS back gesture.
     void didStartUserGesture() {
       _userGestureInProgress = true;
       config.observer?.didStartUserGesture();
     }
   
  +  /// A user gesture is no longer controlling the navigator.
     void didStopUserGesture() {
       _userGestureInProgress = false;
       config.observer?.didStopUserGesture();
  
positive.code:   /// The [Navigator] popped the given route.
    void didPop(Route<dynamic> route, Route<dynamic> previousRoute) { }
  
    /// The [Navigator] is being controlled by a user gesture. Used for the
    /// iOS back gesture.
    void didStartUserGesture() { }
  
    /// User gesture is no longer controlling the [Navigator].
  
negative.code:     _navigator = null;
    }
  
    /// The drag gesture has changed by [fractionalDelta]. The total range of the
    /// drag should be 0.0 to 1.0.
    void dragUpdate(double fractionalDelta);
  
    /// The drag gesture has ended with a horizontal motion of
    /// [fractionalVelocity] as a fraction of screen width per second.
    void dragEnd(double fractionalVelocity);
  }
  
  