navigateTo<T extends Object?, TO extends Object?> method

Future navigateTo<T extends Object?, TO extends Object?>(
  1. String path, {
  2. dynamic body,
  3. bool? replace,
  4. bool? clearTrace,
  5. bool? isSingleTop,
  6. TO? result,
  7. PageTransitionsBuilder? pageTransitions,
})

Navigate to Route path page path body page require arguments replace if ture will replace current page to navigate new page. clearTrace if ture will clear all page to navigate new page. isSingleTop if ture will only path is not current path navigate. result went replace is true, this will able. pageTransitions you navigate transition , if null will use default page transitions builder.

Implementation

Future<dynamic> navigateTo<T extends Object?, TO extends Object?>(String path,
    {dynamic body,
    bool? replace,
    bool? clearTrace,
    bool? isSingleTop,
    TO? result,
    PageTransitionsBuilder? pageTransitions}) async {
  PageTransitionsBuilder? _pageTransitions;
  WidgetBuilder? builder;
  final ctx = Context(
    path,
    body: body,
  );
  if (_interceptor.length > 0) {
    dynamic result;
    for (final interceptor in _interceptor) {
      result = await interceptor(ctx);
      if (result == true) {
        return;
      }
    }
  }
  NavigatorRoute? handler = _register.match(ctx.uri);
  if (handler != null) {
    final interceptor = handler.getInterceptor();
    if (interceptor.length > 0) {
      dynamic result;
      for (final interceptor in interceptor) {
        result = await interceptor(ctx);
        if (result == true) {
          return;
        }
      }
    }
    final result = await handler(ctx);
    if (result is WidgetBuilder) {
      builder = result;
      _pageTransitions = pageTransitions ?? handler.defaultPageTransaction;
    } else if (result is Redirect) {
      return await navigateTo(result.path,
          body: body,
          replace: replace,
          clearTrace: clearTrace,
          isSingleTop: isSingleTop,
          result: result,
          pageTransitions: pageTransitions);
    } else {
      return SynchronousFuture(result);
    }
  } else {
    builder = (BuildContext context) => _errorPage.notFoundPage(context, ctx);
  }

  _pageTransitions ??= _defaultTransitionBuilder;

  dynamic navigateResult;

  if (isSingleTop == true && _observer.topPath == path) {
    return null;
  }

  if (isUseNavigator2 == true) {
    if (clearTrace == true) {
      navigateResult = await _delegate
          .clearTracePush(_pageNamed(ctx, builder, _pageTransitions));
    } else if (replace == true) {
      navigateResult = await _delegate.replacePush<T, TO>(
          _pageNamed(ctx, builder, _pageTransitions), result);
    } else {
      navigateResult =
          await _delegate.push(_pageNamed(ctx, builder, _pageTransitions));
    }
  } else {
    if (clearTrace == true) {
      navigateResult = await navigator.pushAndRemoveUntil<T>(
          _routeNamed<T>(ctx, builder, _pageTransitions), (check) => false);
    } else {
      navigateResult = replace == true
          ? await navigator.pushReplacement<T?, TO>(
              _routeNamed<T>(ctx, builder, _pageTransitions),
              result: result)
          : await navigator
              .push<T>(_routeNamed<T>(ctx, builder, _pageTransitions));
    }
  }
  return SynchronousFuture(navigateResult);
}