anchor.diff:      manifest.fromHero.startFlight();
       manifest.toHero.startFlight();
   
  -    heroRect = new RectTween(
  -      begin: _globalRect(manifest.fromHero.context),
  -      end: _globalRect(manifest.toHero.context),
  +    heroRect = _doCreateRectTween(
  +      _globalBoundingBoxFor(manifest.fromHero.context),
  +      _globalBoundingBoxFor(manifest.toHero.context),
       );
   
       overlayEntry = new OverlayEntry(builder: _buildOverlay);
  
positive.code:   }
  }
  
  // Everything known about a hero flight that's to be started or restarted.
  class _HeroFlightManifest {
    _HeroFlightManifest({
      @required this.type,
  
negative.code:       final PageRoute<dynamic> to = toRoute;
        final Animation<double> animation = (flightType == _HeroFlightType.push) ? to.animation : from.animation;
  
        // A user gesture may have already completed the pop.
        if (flightType == _HeroFlightType.pop && animation.status == AnimationStatus.dismissed)
          return;
  
        // Putting a route offstage changes its animation value to 1.0. Once this
        // frame completes, we'll know where the heroes in the `to` route are
        // going to end up, and the `to` route will go back onstage.
        to.offstage = to.animation.value == 0.0;
  
        WidgetsBinding.instance.addPostFrameCallback((Duration value) {
          _startHeroTransition(from, to, flightType);
        });
      }
    }
  
    // Find the matching pairs of heros in from and to and either start or a new
    // hero flight, or divert an existing one.
    void _startHeroTransition(PageRoute<dynamic> from, PageRoute<dynamic> to, _HeroFlightType flightType) {
      // If the navigator or one of the routes subtrees was removed before this
      // end-of-frame callback was called, then don't actually start a transition.
      if (navigator == null || from.subtreeContext == null || to.subtreeContext == null) {
        to.offstage = false; // in case we set this in _maybeStartHeroTransition
        return;
      }
  
      final Rect navigatorRect = _globalBoundingBoxFor(navigator.context);
  
      // At this point the toHeroes may have been built and laid out for the first time.
      final Map<Object, _HeroState> fromHeroes = Hero._allHeroesFor(from.subtreeContext);
      final Map<Object, _HeroState> toHeroes = Hero._allHeroesFor(to.subtreeContext);
  
      // If the `to` route was offstage, then we're implicitly restoring its
      // animation value back to what it was before it was "moved" offstage.
      to.offstage = false;
  
  