didPop method

  1. @override
void didPop(
  1. Route route,
  2. Route? previousRoute
)
override

The Navigator popped route.

The route immediately below that one, and thus the newly active route, is previousRoute.

Implementation

@override
void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
  super.didPop(route, previousRoute);
  // print('LifecycleObserver($hashCode)#didPop('
  //     'route(${route.hashCode}): ${route.settings.name}, '
  //     'previousRoute(${previousRoute.hashCode}): ${previousRoute?.settings.name})');

  RouteEntry entry = _getRouteEntry(route);
  // Current route trigger pop
  //
  // 当前route触发pop
  _sendEventsToGivenRoute(entry, lifecycleEventsInactiveAndInvisible);
  _history.remove(entry);

  if (previousRoute != null) {
    RouteEntry previousEntry = _getRouteEntry(previousRoute);
    if (route is PageRoute) {
      // Previous Route trigger active
      //
      // 如果pop掉的route是PageRoute,则previousRoute触发active
      _sendEventsToGivenRoute(previousEntry, lifecycleEventsVisibleAndActive);
      if (previousRoute is PopupRoute) {
        // Previous PageRoute trigger visible
        //
        // 如果previousRoute是PopupRoute,则前一个PageRoute触发visible
        _sendEventsToLastPageRoute([LifecycleEvent.visible]);
      }
    } else if (route is PopupRoute) {
      // Previous Route trigger active
      //
      // 如果如果pop掉的route是PopupRoute,则previousEntry触发active
      _sendEventsToGivenRoute(previousEntry, [LifecycleEvent.active]);
    }
  }
}