addRoute<R, P extends RouteParams> method

AppRoute<R, P> addRoute<R, P extends RouteParams>(
  1. AppRoute<R, P> route
)

Implementation

AppRoute<R, P> addRoute<R, P extends RouteParams>(AppRoute<R, P> route) {
  if (_routesByKey.containsKey(route.route)) {
    _log.info("DUPLICATE ROUTE: ${route.route}");
  }
  _routesByKey[route.route] = route;
  String path = route.route;
  // is root/default route, just add it
  if (path == Navigator.defaultRouteName) {
    if (_hasDefaultRoute) {
      // throw an error because the internal consistency of the router
      // could be affected
      throw ("Default route was already defined");
    }
    var node = RouteTreeNode(path, RouteTreeNodeType.component, routes: [route]);
    _nodes.add(node);
    _hasDefaultRoute = true;
    return route;
  }
  if (path.startsWith("/")) {
    path = path.substring(1);
  }
  final pathComponents = path.split('/');
  RouteTreeNode? parent;
  for (int i = 0; i < pathComponents.length; i++) {
    String component = pathComponents[i];
    final node = _nodeForComponent(component, parent) ?? RouteTreeNode(component, _typeForComponent(component), parent: parent);
    if (parent == null) {
      _nodes.add(node);
    } else {
      parent.nodes.add(node);
    }

    if (i == pathComponents.length - 1) {
      node.routes.add(route);
    }
    parent = node;
  }
  return route;
}