deserialize method

  1. @override
void deserialize(
  1. XmlElement? xml
)
override

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();
}