getNode method

  1. @override
LocalNode? getNode(
  1. String path, {
  2. Completer<CallbackNode?>? onLoaded,
  3. bool forceHandle = false,
})
override

Gets an existing node.

Implementation

@override
LocalNode? getNode(
  String path, {
  Completer<CallbackNode?>? onLoaded,
  bool forceHandle = false,
}) {
  var node = super.getNode(path);
  if (path != '/' && node != null && !forceHandle) {
    if (onLoaded != null && !onLoaded.isCompleted) {
      onLoaded.complete(node as CallbackNode);
    }
    return node;
  }

  if (handler == null) {
    if (onLoaded != null && !onLoaded.isCompleted) {
      onLoaded.complete();
    }
    return null;
  }

  var c = Completer<void>();
  var n = CallbackNode(path, provider: this);
  n.onLoadedCompleter = c;
  var isListReady = false;
  n.isListReady = () => isListReady;
  handler!(n)
      .then((dynamic m) {
        if (!m) {
          isListReady = true;
          var ts = ValueUpdate.getTs();
          n.getDisconnectedStatus = () => ts;
          n.listChangeController.add(r'$is');

          if (onLoaded != null && !onLoaded.isCompleted) {
            onLoaded.complete(n);
          }

          if (!c.isCompleted) {
            c.complete();
          }

          return;
        }
        isListReady = true;
        n.listChangeController.add(r'$is');
        if (onLoaded != null && !onLoaded.isCompleted) {
          onLoaded.complete(n);
        }

        if (!c.isCompleted) {
          c.complete();
        }
      })
      .catchError((dynamic e, StackTrace stack) {
        isListReady = true;
        var ts = ValueUpdate.getTs();
        n.getDisconnectedStatus = () => ts;
        n.listChangeController.add(r'$is');

        if (!c.isCompleted) {
          c.completeError(e, stack);
        }
      });
  return n;
}