path property

String path
inherited

the path used to navigate to the route associated with this path

Implementation

String get path {
  final segments = _segments.toList();

  final params = _allParams;

  for (var i = 0; i < segments.length; i++) {
    final segment = segments[i];

    if (!segment.startsWith(':')) {
      continue;
    }

    final id = segment.substring(1);

    if (!params.containsKey(id)) {
      throw Exception(
        'No parameter defined for path: ${segments.join('/')}',
      );
    }

    segments[i] = Uri.encodeComponent(params[id]!);
  }

  final queries = _allQueryParameters;

  final query = StringBuffer();

  if (queries.isNotEmpty) {
    query.write('?');
  }

  for (var i = 0; i < queries.entries.length; i++) {
    final entry = queries.entries.elementAt(i);

    query
      ..write(Uri.encodeComponent(entry.key))
      ..write('=')
      ..write(Uri.encodeComponent(entry.value));

    if (i != queries.entries.length - 1) {
      query.write('&');
    }
  }

  return '/${segments.join('/')}$query';
}