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 ?? 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;
}