namedLocation method

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

Implementation

String namedLocation(
  String name, {
  Map<String, String> pathParameters = const {},
  Map<String, dynamic> queryParameters = const {},
  String? fragment,
}) {
  _ensureOpen();
  final path = _namedPaths[name];
  if (path == null) throw ArgumentError.value(name, 'name', 'Unknown route');
  final required =
      RegExp(r':(\w+)').allMatches(path).map((m) => m[1]!).toSet();
  if (!required.every(pathParameters.containsKey) ||
      pathParameters.keys.any((p) => !required.contains(p))) {
    throw ArgumentError('Path parameters must match $required');
  }
  final encoded = path.replaceAllMapped(
    RegExp(r':(\w+)'),
    (m) => Uri.encodeComponent(pathParameters[m[1]]!),
  );
  // Parse an already escaped path, rather than passing it to Uri(path: ...).
  return Uri.parse(encoded)
      .replace(
        queryParameters: queryParameters.isEmpty ? null : queryParameters,
        fragment: fragment,
      )
      .toString();
}