match method

(RouteData?, Map<String, String>) match(
  1. String method,
  2. Uri uri
)

Matches the given method and uri against registered routes.

Returns a tuple containing the RouteData and a map of path parameters.

Implementation

(RouteData?, Map<String, String>) match(String method, Uri uri) {
  final segments = uri.path.split('/').where((s) => s.isNotEmpty).toList();
  final params = <String, String>{};
  var current = _root;

  for (var i = 0; i < segments.length; i++) {
    final segment = segments[i];
    if (current.children.containsKey(segment)) {
      current = current.children[segment]!;
    } else if (current.dynamicChild != null) {
      current = current.dynamicChild!;
      params[current.paramName!] = segment;
    } else if (current.wildcardChild != null) {
      current = current.wildcardChild!;
      params['*'] = segments.sublist(i).join('/');
      break;
    } else {
      return (null, <String, String>{});
    }
  }

  final data = current.handlers[method.toUpperCase()];
  return (data, params);
}