addRoute<R, P extends RouteParams> method
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;
}