getOrCreateNode method

  1. @override
LocalNode getOrCreateNode(
  1. String path, [
  2. bool addToTree = true,
  3. bool init = true
])
override

Gets a node at the given path if it exists. If it does not exist, create a new node and return it.

When addToTree is false, the node will not be inserted into the node provider. When init is false, onCreated() is not called.

Implementation

@override
LocalNode getOrCreateNode(
  String path, [
  bool addToTree = true,
  bool init = true,
]) {
  var node = _getNode(path, allowStubs: true);

  if (node != null) {
    if (addToTree) {
      Path? po = Path(path);
      if (!po.isRoot) {
        var parent = getNode(po.parentPath);

        if (parent != null && !parent.children.containsKey(po.name)) {
          parent.addChild(po.name, node);
          parent.listChangeController.add(po.name);
          node.listChangeController.add(r'$is');
        }
      }

      if (node is SimpleNode) {
        node._stub = false;
      }
    }

    return node;
  }

  if (addToTree) {
    return createNode(path, init);
  } else {
    node = SimpleNode(path, this).._stub = true;
    nodes[path] = node;
    return node;
  }
}