deserialize method
Deserializes the FML template elements, attributes and children
Implementation
@override
void deserialize(XmlElement xml) {
// deserialize
super.deserialize(xml);
// properties
zoom = Xml.get(node: xml, tag: 'zoom');
autozoom = Xml.get(node: xml, tag: 'autozoom');
latitude = Xml.get(node: xml, tag: 'latitude');
longitude = Xml.get(node: xml, tag: 'longitude');
// add layers
var layers = Xml.getChildElements(node: xml, tag: "LAYER");
if (layers != null) {
for (var layer in layers) {
String? url = Xml.get(node: layer, tag: 'url');
if (url != null) this.layers.add(url);
}
}
// build locations
List<MapMarkerModel> markers =
findChildrenOfExactType(MapMarkerModel).cast<MapMarkerModel>();
for (var model in markers) {
// data driven prototype location
if (!isNullOrEmpty(model.datasource)) {
if (!prototypes.containsKey(model.datasource)) {
prototypes[model.datasource] = [];
}
// build prototype
var prototype = prototypeOf(model.element) ?? model.element;
// add location model
if (prototype != null) {
prototypes[model.datasource]!.add(prototype);
}
// register listener to the models datasource
IDataSource? source = scope?.getDataSource(model.datasource);
if (source != null) source.register(this);
}
// static location
else {
this.markers.add(model);
}
}
}