builder<T extends Object?> static method

RouterNode<T> builder<T extends Object?>(
  1. String path, {
  2. T? data,
  3. List<RouterNode<T>> children = const [],
})

Implementation

static RouterNode<T> builder<T extends Object?>(String path,
    {T? data, List<RouterNode<T>> children = const []}) {
  late final RouterNode<T> leafNode, rootNode;

  if (path == '/') {
    leafNode = RouterNode<T>(
      data: data,
      name: '',
      children: {},
      isParameter: false,
    );
    rootNode = leafNode;
  } else {
    final node = RouterNode<T>.fromPath(path);
    leafNode = node.leftMostLeaf;
    leafNode.data ??= data;

    if (node.children.isEmpty) {
      return node;
    }

    rootNode = node.children.values.first;
  }

  for (final child in children) {
    if (child.name == '') {
      leafNode.data ??= child.data;

      for (final child in child.children.values) {
        leafNode.addAndMergeSubtree(child);
      }
    } else {
      leafNode.addAndMergeSubtree(child);
    }
  }

  return rootNode;
}