pop<T extends RouteParams?> method

Future<void> pop<T extends RouteParams?>({
  1. T? args,
  2. RouteSettings? settings,
})

Pops the current route off the navigator.

  • args: An optional RouteParams object to pass to the route that will become visible after this one is popped. The receiving route can get this argument via context.getArgumentAndClean() in its onAppear callback.

Implementation

Future<void> pop<T extends RouteParams?>({
  T? args,
  RouteSettings? settings,
}) async {
  final popParams = getArgumentAndClean<_PopParam>(
    settings: settings,
  )?.popParams;
  final navigator = navigate;

  if (navigator.canPop()) {
    final name = settings?.name ?? ModalRoute.of(this)?.settings.name;
    navigator.popUntil((route) {
      if (route.settings.name == name) {
        return false;
      }
      if (route.settings.arguments is Map) {
        _createArguments([args, popParams]).forEach(
          (key, value) {
            ((route.settings.arguments as Map?) ?? {}).update(
              key,
              (value) => value,
              ifAbsent: () => value,
            );
          },
        );
      }
      return true;
    });
  } else {
    await pushNamed(
      BrowserConfig.of(this).defaultRoute.path,
      args: [args, popParams],
      navigator: navigator,
    );
  }
}