pop<T> method

void pop<T>([
  1. T? result
])

Pops the current route, optionally returning a result.

The result is used to complete the Future returned by push.

Implementation

void pop<T>([T? result]) {
  if (_routes.isEmpty) return;

  final route = _routes.last;
  final previousRoute = _routes.length > 1
      ? _routes[_routes.length - 2]
      : null;

  // Clean up entry keys before disposing (dispose clears overlayEntries).
  for (final entry in route.overlayEntries) {
    _entryKeys.remove(entry);
  }

  _routes.removeLast();
  route.dispose();

  // Complete the route's future.
  final completer = _routeCompleters.remove(route);
  if (completer != null && !completer.isCompleted) {
    completer.complete(result);
  }

  setState(() {});

  for (final observer in widget.observers) {
    observer.didPop(route, previousRoute);
  }
}