buildUri static method
- @visibleForTesting
- Uri baseUrl,
- Uri url,
- Map<
String, dynamic> parameters, { - ListFormat? listFormat,
- @Deprecated('Use listFormat instead') bool? useBrackets,
- 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;
}