fromXmlList static method

DrawerModel? fromXmlList(
  1. WidgetModel parent,
  2. List<XmlElement> elements
)

Implementation

static DrawerModel? fromXmlList(WidgetModel parent, List<XmlElement> elements)
{
  DrawerModel? model;
  try
  {
    bool handleLeft = false;
    bool handleRight = false;
    bool handleTop = false;
    bool handleBottom = false;
    double? sizeLeft;
    double? sizeRight;
    double? sizeTop;
    double? sizeBottom;
    String? idLeft;
    String? idRight;
    String? idTop;
    String? idBottom;

    XmlElement xml = XmlElement(XmlName.fromString('DRAWER')); // create a single drawer element
    elements.forEach((e)
    {
      XmlElement x = e.copy();
      String? side = x.getAttribute('side') ?? null; // determine side from each drawer in template
      String? size = x.getAttribute('size') ?? null;
      String? id   = x.getAttribute('id') ?? null;
      bool? handle = S.toBool(x.getAttribute('handle'));
      if (!S.isNullOrEmpty(side))
      {
        XmlElement drawer = XmlElement(XmlName(side?.toUpperCase() ?? 'left'.toUpperCase())); // create a sidedrawer from template

          drawer.attributes.add(XmlAttribute(XmlName.fromString('id'), id!));

          // Assign ids
          if (side == 'left')
          {
            idLeft = id;
            if (handle == true) handleLeft = true;
          }
          else if (side == 'right')
          {
            idRight = id;
            if (handle == true) handleRight = true;
          }
          else if (side == 'top')
          {
            idTop = id;
            if (handle == true) handleTop = true;
          }
          else if (side == 'bottom')
          {
            idBottom = id;
            if (handle == true) handleBottom = true;
          }

          // Assign sides
          if (!S.isNullOrEmpty(size))
          {
            drawer.attributes.add(XmlAttribute(XmlName.fromString('size'), size!));
                 if (side == 'left')   sizeLeft = S.toDouble(size);
            else if (side == 'right')  sizeRight = S.toDouble(size);
            else if (side == 'top')    sizeTop = S.toDouble(size);
            else if (side == 'bottom') sizeBottom = S.toDouble(size);
          }


        List<XmlElement> nodes = [];
        x.children.forEach((node)
        {
          if (node.nodeType == XmlNodeType.ELEMENT) nodes.add(node.copy() as XmlElement);
        });

        drawer.children.addAll(nodes);
        xml.children.add(drawer);
      }
      else
      {
        Log().error('Unable to parse a drawer attributes', caller: 'drawer.Model => Model.fromXmlList()');
      }
    });

    // Create View Model
    model = DrawerModel(parent, Xml.get(node: xml, tag: 'id'), handleLeft: handleLeft, handleRight: handleRight, handleTop: handleTop, handleBottom: handleBottom, sizeLeft: sizeLeft, sizeRight: sizeRight, sizeTop: sizeTop, sizeBottom: sizeBottom, idLeft: idLeft, idRight: idRight, idTop: idTop, idBottom: idBottom);

    // Deserialize
    model.deserialize(xml);
  }
  catch(e)
  {
    Log().error('Unable to parse a drawer element', caller: 'drawer.Model => Model.fromXmlList()');
    Log().exception(e,  caller: 'drawer.Model');
    model = null;
  }
  return model;
}