navigate method

  1. @override
void navigate(
  1. String link, {
  2. bool named = false,
  3. bool push = false,
  4. bool replaceCurrent = false,
  5. Map<String, dynamic>? extra,
  6. String? errorRoute,
  7. Map<String, String>? queryParams,
  8. Map<String, String>? params,
  9. required Map<String, dynamic> eventProps,
})
override

Implementation

@override
// ignore: long-parameter-list
void navigate(
  String link, {
  bool named = false,
  bool push = false,
  bool replaceCurrent = false,
  Map<String, dynamic>? extra,
  String? errorRoute,
  Map<String, String>? queryParams,
  Map<String, String>? params,
  required Map<String, dynamic> eventProps,
}) {
  final router = getObject<GoRouter>();
  extra ??= {};
  extra.addAll({'eventProps': eventProps});

  if (push || replaceCurrent) {
    if (replaceCurrent) router.pop();
    if (named) {
      router.pushNamed(link,
          extra: extra,
          queryParameters: queryParams ?? {},
          pathParameters: params ?? {});
    } else {
      var finalLink = link;
      if (queryParams != null && queryParams.isNotEmpty) {
        final providedLink = Uri.parse(link);
        finalLink = providedLink.replace(queryParameters: {
          ...providedLink.queryParameters,
          ...queryParams
        }).toString();
      }

      router.push(
        finalLink,
        extra: extra,
      );
    }
    return;
  }

  if (named) {
    router.goNamed(link,
        extra: extra,
        queryParameters: queryParams ?? {},
        pathParameters: params ?? {});
  } else {
    router.go(
      link,
      extra: extra,
    );
  }
}