fromXmlList static method
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
for (var element in elements) {
XmlElement node = element.copy();
String? side = Xml.attribute(node: node, tag: 'side')?.trim().toLowerCase();
if (side != null)
{
// build the drawer elements
XmlElement drawer = XmlElement(XmlName(side.toUpperCase())); // create a sidedrawer from template
// add attributes
for (var attribute in node.attributes) {
var name = attribute.localName.toLowerCase();
if (name != "width" && name != "height" && name != "side") drawer.attributes.add(XmlAttribute(XmlName(name), attribute.value));
}
// Assign ids
switch (side)
{
case 'left':
idLeft = Xml.attribute(node: node, tag: 'id');
handleLeft = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeLeft = S.toDouble(Xml.attribute(node: node, tag: 'size'));
break;
case 'right':
idRight = Xml.attribute(node: node, tag: 'id');
handleRight = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeRight = S.toDouble(Xml.attribute(node: node, tag: 'size'));
break;
case 'top':
idTop = Xml.attribute(node: node, tag: 'id');
handleTop = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeTop = S.toDouble(Xml.attribute(node: node, tag: 'size'));
break;
case 'bottom':
idBottom = Xml.attribute(node: node, tag: 'id');
handleBottom = S.toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeBottom = S.toDouble(Xml.attribute(node: node, tag: 'size'));
break;
}
List<XmlElement> nodes = [];
for (var node in node.children) {
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;
}