fromQrCode method
Implementation
EUDigitalCovidCertificate? fromQrCode(String raw) {
// Decode the QRCode
var parts = _extract(raw);
// Check for the signature
var check = _check(parts);
// Extract data and parse content
var c = Cbor();
c.decodeFromBuffer(parts.payload);
var payload = c.getDecodedData()![0];
// Extract content
var issuer = payload[1];
var issuedAt = DateTime.fromMicrosecondsSinceEpoch(payload[6] * 1000000);
var expiresAt = DateTime.fromMicrosecondsSinceEpoch(payload[4] * 1000000);
var certificates = payload[-260].values.toList();
List<Certificate> certs = [];
certificates.forEach((cert) {
_mapConvert(Map<dynamic, dynamic> m) {
Map<String, dynamic> json = {};
m.forEach((key, value) {
if (key is! String) {
return;
}
if (value is Map<dynamic, dynamic>) {
value = _mapConvert(value);
}
if (value is List<dynamic>) {
value = value.map((v) {
if (v is Map<dynamic, dynamic>) {
v = _mapConvert(v);
}
return v;
}).toList();
}
json[key] = value;
});
return json;
}
var j = _mapConvert(cert);
certs.add(Certificate.fromJson(j));
});
return EUDigitalCovidCertificate(
qr: raw,
issuer: countryFromJson(issuer),
issuedAt: issuedAt,
expiresAt: expiresAt,
certificates: certs,
check: check,
);
}