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 ?? 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);
}
// create shortcuts
var shortcuts =
findChildrenOfExactType(ShortcutModel).cast<ShortcutModel>();
if (shortcuts.isNotEmpty) {
this.shortcuts = [];
this
.shortcuts!
.addAll(findChildrenOfExactType(ShortcutModel).cast<ShortcutModel>());
}
// ready
initialized = true;
// force rebuild
rebuild();
}