addExternalElementToElement method

  1. @override
List<UINode>? addExternalElementToElement(
  1. UINode element,
  2. Object? externalElement, {
  3. DOMTreeMap<Node>? treeMap,
  4. DOMContext<Node>? context,
})

Implementation

@override
List<UINode>? addExternalElementToElement(
    UINode element, Object? externalElement,
    {DOMTreeMap<Node>? treeMap, DOMContext<Node>? context}) {
  if (externalElement == null) return null;

  if (externalElement is List) {
    if (externalElement.isEmpty) return null;

    if (externalElement.length == 1) {
      return addExternalElementToElement(element, externalElement.first,
          treeMap: treeMap, context: context);
    }

    var children = <UINode>[];
    for (var elem in externalElement) {
      var child = addExternalElementToElement(element, elem,
          treeMap: treeMap, context: context);
      if (child != null) {
        children.addAll(child);
      }
    }
    return children;
  } else if (externalElement is UIComponent) {
    var component = externalElement;
    var componentContent = component.content;

    if (componentContent != null) {
      final element2 = element.asElementChecked;
      if (element2 != null) {
        element2.appendChild(componentContent);
        component.setParent(element2);
        _resolveParentUIComponent(element2, component.content,
            childUIComponent: component);
        component.ensureRendered();
        return [componentContent];
      } else {
        _resolveParentUIComponent(element2, component.content,
            childUIComponent: component);
        return null;
      }
    }
  } else if (externalElement is MessageBuilder) {
    var text = externalElement.build();
    var span = HTMLSpanElement();
    setElementInnerHTML(span, text);
    element.appendChild(span);
    return [span];
  }

  return super.addExternalElementToElement(element, externalElement,
      treeMap: treeMap, context: context);
}