addRoute method
将路由添加到路由树
Implementation
void addRoute(AppRoute route) {
String path = route.route;
/// 是根或默认路由,只需添加
if (path == Navigator.defaultRouteName) {
if (_hasDefaultRoute) {
/// 引发错误,影响路由器的内部一致性
throw ("Default route was already defined");
}
/// 创建节点
var node = RouteTreeNode(path, RouteTreeNodeType.component);
node.routes = [route];
_nodes.add(node);
_hasDefaultRoute = true;
return;
}
/// 非根路由 解析路径 判断是否是路径组成成分
if (path.startsWith("/")) {
path = path.substring(1);
}
List<String> pathComponents = path.split('/');
RouteTreeNode? parent;
/// 循环组成部分
for (int i = 0; i < pathComponents.length; i++) {
String component = pathComponents[i];
RouteTreeNode? node = _nodeForComponent(component, parent);
if (node == null) {
/// 得到节点的类型
RouteTreeNodeType type = _typeForComponent(component);
/// 创建节点
node = RouteTreeNode(component, type);
/// 添加父母
node.parent = parent;
/// 添加孩子
if (parent == null) {
_nodes.add(node);
} else {
parent.nodes!.add(node);
}
}
/// 结束生成路径 插入树
if (i == pathComponents.length - 1) {
if (node.routes == null) {
node.routes = [route];
} else {
node.routes!.add(route);
}
}
parent = node;
}
}