deserialize method
Deserializes the FML template elements, attributes and children
Implementation
@override
void deserialize(XmlElement? xml)
{
if (xml == null) return;
//Log().debug('Deserialize called on framework model => <FML name="$templateName" url="$url"/>');
// remember xml node
element = xml;
// get bindings
bindables = Binding.getBindingKeys(xml.toXmlString());
bindables ??= [];
// stack index
index = -1;
// deserialize
super.deserialize(xml);
// properties
key = xml.getAttribute('key') ?? key ?? S.newId();
dependency = xml.getAttribute('dependency') ?? dependency;
title = Xml.get(node: xml, tag: 'title') ?? title;
version = Xml.get(node: xml, tag: 'version') ?? version;
onstart = Xml.get(node: xml, tag: 'onstart') ?? onstart;
url = Xml.get(node: xml, tag: 'url') ?? url;
orientation = Xml.get(node: xml, tag: 'orientation') ?? orientation;
onreturn = Xml.get(node: xml, tag: 'onreturn') ?? onreturn;
// header
List<HeaderModel> headers = findChildrenOfExactType(HeaderModel).cast<HeaderModel>();
for (var header in headers) {
if (header == headers.first)
{
this.header = header;
this.header!.registerListener(this);
}
if (children!.contains(header)) children!.remove(header);
}
removeChildrenOfExactType(HeaderModel);
// footer
List<FooterModel> footers = findChildrenOfExactType(FooterModel).cast<FooterModel>();
for (var footer in footers) {
if (footer == footers.first)
{
this.footer = footer;
this.footer!.registerListener(this);
}
if (children!.contains(footer)) children!.remove(footer);
}
removeChildrenOfExactType(FooterModel);
// build drawers
List<XmlElement>? nodes;
nodes = Xml.getChildElements(node: xml, tag: "DRAWER");
if (nodes != null && nodes.isNotEmpty) drawer = DrawerModel.fromXmlList(this, nodes);
// ready
initialized = true;
}