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;
    }
  });
}