resolveParentUIComponent static method

void resolveParentUIComponent({
  1. UINode? parent,
  2. UINode? element,
  3. UIComponent? parentUIComponent,
  4. UIComponent? elementUIComponent,
  5. bool recursive = false,
})

Implementation

static void resolveParentUIComponent(
    {UINode? parent,
    UINode? element,
    UIComponent? parentUIComponent,
    UIComponent? elementUIComponent,
    bool recursive = false}) {
  if ((parent == null && parentUIComponent == null) ||
      (element == null && elementUIComponent == null)) {
    return;
  }

  if (elementUIComponent == null && element is UIElement) {
    elementUIComponent = _resolveNodeUIComponent(element);
  }

  if (elementUIComponent == null) {
    if (recursive && element is UIElement && element.hasUIChildren) {
      if (parentUIComponent == null && parent is UIElement) {
        parentUIComponent =
            _resolveNodeUIComponent(parent, getUIComponentByChild: true);
      }

      if (parentUIComponent != null) {
        for (var child in element.children) {
          resolveParentUIComponent(
              parent: parent,
              parentUIComponent: parentUIComponent,
              element: child);
        }
      }
    }

    return;
  }

  if (elementUIComponent._parentUIComponent != null) {
    return;
  }

  if (parentUIComponent == null && parent is UIElement) {
    parentUIComponent =
        _resolveNodeUIComponent(parent, getUIComponentByChild: true);
  }

  if (parentUIComponent != null) {
    elementUIComponent._setParentUIComponent(parentUIComponent);
  } else {
    elementUIComponent._resolveParentUIComponent(
        parent ?? parentUIComponent ?? elementUIComponent._parent);
  }
}