namedLocation method

String namedLocation(
  1. String name, {
  2. Map<String, String> pathParameters = const <String, String>{},
  3. Map<String, dynamic> queryParameters = const <String, dynamic>{},
  4. String? fragment,
})

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();
}