toXml method
must only be called to save this object.
Implementation
@override
XmlElement toXml() {
final el = super.toXml()..replaceSingle(customData.toXml());
XmlUtils.removeChildrenByName(el, KdbxXml.NODE_STRING);
XmlUtils.removeChildrenByName(el, KdbxXml.NODE_HISTORY);
XmlUtils.removeChildrenByName(el, KdbxXml.NODE_BINARY);
el.children.addAll(stringEntries.map((stringEntry) {
final value = XmlElement(XmlName(KdbxXml.NODE_VALUE));
if (stringEntry.value is ProtectedValue) {
value.attributes.add(
XmlAttribute(XmlName(KdbxXml.ATTR_PROTECTED), KdbxXml.VALUE_TRUE));
KdbxFile.setProtectedValueForNode(
value, stringEntry.value as ProtectedValue?);
} else if (stringEntry.value is StringValue) {
value.children.add(XmlText(stringEntry.value!.getText()!));
}
return XmlElement(XmlName(KdbxXml.NODE_STRING))
..children.addAll([
XmlElement(XmlName(KdbxXml.NODE_KEY))
..children.add(XmlText(stringEntry.key.key)),
value,
]);
}));
el.children.addAll(binaryEntries.map((binaryEntry) {
final key = binaryEntry.key;
final binary = binaryEntry.value;
final value = XmlElement(XmlName(KdbxXml.NODE_VALUE));
if (binary.isInline) {
binary.saveToXml(value);
} else {
final binaryIndex = ctx.findBinaryId(binary);
value.addAttribute(KdbxXml.ATTR_REF, binaryIndex.toString());
}
return XmlElement(XmlName(KdbxXml.NODE_BINARY))
..children.addAll([
XmlElement(XmlName(KdbxXml.NODE_KEY))..children.add(XmlText(key.key)),
value,
]);
}));
if (!isHistoryEntry) {
el.children.add(
XmlElement(XmlName(KdbxXml.NODE_HISTORY))
..children.addAll(history.map((e) => e.toXml())),
);
}
return el;
}