pushAndRemoveUntil method

void pushAndRemoveUntil(
  1. String path,
  2. RoutePredicate predicate, {
  3. Map<String, dynamic>? extra,
})

Push a new route and remove routes until the given predicate returns true

See Navigator.pushAndRemoveUntil for more details

Implementation

void pushAndRemoveUntil(
  String path,
  RoutePredicate predicate, {
  Map<String, dynamic>? extra,
}) {
  try {
    final context = _currentContext;
    if (context == null) {
      if (_enableLogger) {
        debugPrint('NavService.pushAndRemoveUntil: No valid context found.');
      }
      return;
    }

    final navExtra = NavExtra(extra ?? {});
    final route = _routes[path];

    if (route == null) {
      if (_enableLogger) {
        debugPrint(
          'NavService.pushAndRemoveUntil: Route not found for path: $path',
        );
      }
      return;
    }

    Navigator.of(context).pushAndRemoveUntil(
      _buildPageRoute<dynamic>(path: path, extra: navExtra, route: route),
      predicate,
    );
    // ignore: avoid_catches_without_on_clauses
  } catch (e, st) {
    if (_enableLogger) {
      debugPrint('NavService.pushAndRemoveUntil.exception: $e\n$st');
    }
  }
}