WebRequest.settings constructor

WebRequest.settings(
  1. RouteSettings settings, {
  2. String? route,
})

from RouteSettings

Implementation

factory WebRequest.settings(
  RouteSettings settings, {
  String? route,
}) {
  Map<String, String>? data = {};
  try {
    if (route == null) {
      throw Exception();
    }
    if (settings.name == null) {
      throw Exception();
    }

    final requestPath = Uri.parse(settings.name!).path;
    final requestPaths =
        requestPath.split('/').where((path) => path.isNotEmpty).toList();
    final routePaths =
        route.split('/').where((path) => path.isNotEmpty).toList();

    if (requestPaths.length != routePaths.length) {
      throw Exception();
    }

    for (int i = 0; i < requestPaths.length; i++) {
      if (requestPaths[i] != routePaths[i]) {
        final match = RegExp(r'^\{(.+)\}$').firstMatch(routePaths[i]);
        if (match == null || match.groupCount == 0) {
          throw Exception();
        }
        final name = match.group(1);
        data[name!] = requestPaths[i];
      }
    }
  } catch (e) {
    route = null;
    data = null;
  }

  return WebRequest._(
    settings: settings,
    route: route,
    data: data,
  );
}