namedLocation method

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

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>{},
}) {
  assert(() {
    log('getting location for name: '
        '"$name"'
        '${pathParameters.isEmpty ? '' : ', pathParameters: $pathParameters'}'
        '${queryParameters.isEmpty ? '' : ', queryParameters: $queryParameters'}');
    return true;
  }());
  assert(_nameToPath.containsKey(name), 'unknown route name: $name');
  final String path = _nameToPath[name]!;
  assert(() {
    // Check that all required params are present
    final List<String> paramNames = <String>[];
    patternToRegExp(path, paramNames);
    for (final String 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 Map<String, String> encodedParams = <String, String>{
    for (final MapEntry<String, String> param in pathParameters.entries)
      param.key: Uri.encodeComponent(param.value)
  };
  final String location = patternToPath(path, encodedParams);
  return Uri(
          path: location,
          queryParameters: queryParameters.isEmpty ? null : queryParameters)
      .toString();
}