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 (toEnum(side, Drawers.values)) {
case Drawers.left:
idLeft = Xml.attribute(node: node, tag: 'id');
handleLeft =
toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeLeft = toDouble(Xml.attribute(node: node, tag: 'size'));
break;
case Drawers.right:
idRight = Xml.attribute(node: node, tag: 'id');
handleRight =
toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeRight = toDouble(Xml.attribute(node: node, tag: 'size'));
break;
case Drawers.top:
idTop = Xml.attribute(node: node, tag: 'id');
handleTop =
toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeTop = toDouble(Xml.attribute(node: node, tag: 'size'));
break;
case Drawers.bottom:
idBottom = Xml.attribute(node: node, tag: 'id');
handleBottom =
toBool(Xml.attribute(node: node, tag: 'handle')) == true;
sizeBottom = toDouble(Xml.attribute(node: node, tag: 'size'));
break;
default:
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;
}