namedLocation method
Looks up the url location by a GoRoute's name.
Implementation
String namedLocation(
String name, {
Map<String, String> pathParameters = const <String, String>{},
Map<String, dynamic> queryParameters = const <String, dynamic>{},
String? fragment,
}) {
assert(() {
log(
'getting location for name: '
'"$name"'
'${pathParameters.isEmpty ? '' : ', pathParameters: $pathParameters'}'
'${queryParameters.isEmpty ? '' : ', queryParameters: $queryParameters'}'
'${fragment != null ? ', fragment: $fragment' : ''}',
);
return true;
}());
assert(_nameToPath.containsKey(name), 'unknown route name: $name');
final _NamedPath path = _nameToPath[name]!;
assert(() {
// Check that all required params are present
final paramNames = <String>[];
patternToRegExp(path.path, paramNames, caseSensitive: path.caseSensitive);
for (final paramName in paramNames) {
assert(pathParameters.containsKey(paramName), 'missing param "$paramName" for $path');
}
// Check that there are no extra params
for (final String key in pathParameters.keys) {
assert(paramNames.contains(key), 'unknown param "$key" for $path');
}
return true;
}());
final encodedParams = <String, String>{
for (final MapEntry<String, String> param in pathParameters.entries)
param.key: Uri.encodeComponent(param.value),
};
final String location = patternToPath(path.path, encodedParams);
return Uri(
path: location,
queryParameters: queryParameters.isEmpty ? null : queryParameters,
fragment: fragment,
).toString();
}