match method

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

Implementation

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

  for (int i = 0; i < segments.length; i++) {
    String 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!;
      // Capture trailing path for wildcard
      params['*'] = segments.sublist(i).join('/');
      break;
    } else {
      return (null, {});
    }
  }

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