anchor.diff:      }
     }
   
  +  /// Whether this route can perform a transition to the given route.
  +  ///
  +  /// Subclasses can override this function to restrict the set of routes they
  +  /// need to coordinate transitions with.
     bool canTransitionTo(TransitionRoute nextRoute) => true;
  +
  +  /// Whether this route can perform a transition from the given route.
  +  ///
  +  /// Subclasses can override this function to restrict the set of routes they
  +  /// need to coordinate transitions with.
     bool canTransitionFrom(TransitionRoute nextRoute) => true;
   
     void finished() {
  
positive.code:   void didReplace(Route oldRoute) {
      if (oldRoute is TransitionRoute)
        _controller.value = oldRoute._controller.value;
      _animation.addStatusListener(handleStatusChanged);
      super.didReplace(oldRoute);
    }
  
  
negative.code:   }
  }
  
  /// Where a [ModalRoute] should be positioned within the [Navigator]'s [Overlay].
  class ModalPosition {
    const ModalPosition({ this.top, this.right, this.bottom, this.left });
  
    /// The offset of the route's top edge from the top of the overlay.
    final double top;
  
    /// The offset of the route's right edge from the right of the overlay.
    final double right;
  
    /// The offset of the route's bottom edge from the bottom of the overlay.
    final double bottom;
  
    /// The offset of the route's left edge from the left of the overlay.
    final double left;
  }
  
  /// A route that blocks interaction with previous routes.
  abstract class ModalRoute<T> extends TransitionRoute<T> with LocalHistoryRoute<T> {
    ModalRoute({
      Completer<T> completer,
  