deserialize method
Deserializes the FML template elements, attributes and children
Implementation
@override
void deserialize(XmlElement xml)
{
Log().debug('Deserialize called on framework model => <FML name="$templateName" url="$url"/>');
// remember xml node
this.element = xml;
// get bindings
bindables = Binding.getBindingKeys(xml.toXmlString());
if (bindables == null) bindables = [];
// stack index
this.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>();
headers.forEach((header)
{
if (header == headers.first)
{
this.header = header;
this.header!.registerListener(this);
}
if (children!.contains(header)) children!.remove(header);
});
// remove from view stream
removeChildrenOfExactType(HeaderModel);
// footer
List<FooterModel> footers = findChildrenOfExactType(FooterModel).cast<FooterModel>();
footers.forEach((footer)
{
if (footer == footers.first)
{
this.footer = footer;
this.footer!.registerListener(this);
}
if (children!.contains(footer)) children!.remove(footer);
});
// remove from view stream
removeChildrenOfExactType(FooterModel);
// build drawers
List<XmlElement>? nodes;
nodes = Xml.getChildElements(node: xml, tag: "DRAWER");
if (nodes != null && nodes.isNotEmpty) drawer = DrawerModel.fromXmlList(this, nodes);
// sort children by depth
if (children != null) {
children?.sort((a, b) {
if(a.depth != null && b.depth != null)return a.depth?.compareTo(b.depth!) ?? 0;
return 0;
});
}
// ready
initialized = true;
}