popToFirst<T extends RouteParams?> method

Future<void> popToFirst<T extends RouteParams?>({
  1. List<T> args = const [],
  2. RouteSettings? settings,
})

Implementation

Future<void> popToFirst<T extends RouteParams?>({
  List<T> args = const [],
  RouteSettings? settings,
}) async {
  final popParams = getArgumentAndClean<_PopParam>(settings: settings)
      ?.popParams;

  if (!navigate.canPop()) {
    await pushNamed<T>(
      BrowserConfig.of(this).defaultRoute.path,
      args: [...args, if (popParams is T) popParams],
    );
    return;
  }

  return navigate.popUntil((route) {
    if (route.isFirst) {
      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 {
      return false;
    }
  });
}