buildElement method

T buildElement(
  1. DOMElement? domParent,
  2. T? parent,
  3. DOMElement domElement,
  4. DOMTreeMap<T> treeMap,
  5. DOMContext<T>? context,
)

Implementation

T buildElement(DOMElement? domParent, T? parent, DOMElement domElement,
    DOMTreeMap<T> treeMap, DOMContext<T>? context) {
  if (domParent != null) {
    domElement.parent = domParent;
  }

  var element = createWithRegisteredElementGenerator(
      domParent, parent, domElement, treeMap, context);

  if (element == null) {
    final domContext = _domContext;
    if (domContext != null) {
      element = domContext.resolveNamedElement(
          domParent, parent, domElement, treeMap);
    }

    final domTag = domElement.tag;
    if (domTag == 'svg') {
      element ??= createSVGElement(domElement);
      if (element == null) {
        throw StateError("Can't create SVG element!");
      }

      if (parent != null) {
        addChildToElement(parent, element);
      }

      treeMap.map(domElement, element);
      _callOnElementCreated(treeMap, domElement, element, context);
    } else {
      element ??= createElement(domTag, domElement);
      if (element == null) {
        throw StateError("Can't create element for tag: $domTag");
      }

      setAttributes(domElement, element, treeMap,
          preserveClass: true, preserveStyle: true);

      if (parent != null) {
        addChildToElement(parent, element);
      }

      treeMap.map(domElement, element);
      _callOnElementCreated(treeMap, domElement, element, context);

      final length = domElement.length;
      if (length > 0) {
        final domContent = domElement.content!;
        for (var i = 0; i < length; ++i) {
          var node = domContent[i];
          build(domElement, element, node, treeMap, context);
        }
      }
    }
  } else if (parent != null) {
    addChildToElement(parent, element);
  }

  domElement.notifyElementGenerated(element);

  return element;
}