buildUri static method

  1. @visibleForTesting
Uri buildUri(
  1. Uri baseUrl,
  2. Uri url,
  3. Map<String, dynamic> parameters, {
  4. ListFormat? listFormat,
  5. @Deprecated('Use listFormat instead') bool? useBrackets,
  6. bool? includeNullQueryVars,
})

Builds a valid URI from baseUrl, url and parameters.

If url starts with 'http://' or 'https://', baseUrl is ignored.

Implementation

@visibleForTesting
static Uri buildUri(
  Uri baseUrl,
  Uri url,
  Map<String, dynamic> parameters, {
  ListFormat? listFormat,
  @Deprecated('Use listFormat instead') bool? useBrackets,
  bool? includeNullQueryVars,
}) {
  // If the request's url is already a fully qualified URL, we can use it
  // as-is and ignore the baseUrl.
  final Uri uri = url.isScheme('HTTP') || url.isScheme('HTTPS')
      ? url
      : _mergeUri(baseUrl, url);

  // Check if parameter also has all the queryParameters from the url (not the merged uri)
  final bool parametersContainsUriQuery = parameters.keys
      .every((element) => url.queryParametersAll.keys.contains(element));
  final Map<String, dynamic> allParameters = parametersContainsUriQuery
      ? parameters
      : {...url.queryParametersAll, ...parameters};

  final String query = mapToQuery(
    allParameters,
    listFormat: listFormat,
    // ignore: deprecated_member_use_from_same_package
    useBrackets: useBrackets,
    includeNullQueryVars: includeNullQueryVars,
  );

  return query.isNotEmpty ? uri.replace(query: query) : uri;
}