readVersion method
Implementation
UQrVersion readVersion() {
final UQrVersion? cached = _version;
if (cached != null) return cached;
final int dimension = _bits.height;
final int provisional = (dimension - 17) ~/ 4;
if (provisional <= 6) {
final UQrVersion version = UQrVersion.forNumber(provisional);
_version = version;
return version;
}
int versionBits = 0;
final int ijMin = dimension - 11;
for (int j = 5; j >= 0; j--) {
for (int i = dimension - 9; i >= ijMin; i--) {
versionBits = _copyBit(i, j, versionBits);
}
}
UQrVersion? version = UQrVersion.decodeVersionInformation(versionBits);
if (version != null && version.dimension == dimension) {
_version = version;
return version;
}
versionBits = 0;
for (int i = 5; i >= 0; i--) {
for (int j = dimension - 9; j >= ijMin; j--) {
versionBits = _copyBit(i, j, versionBits);
}
}
version = UQrVersion.decodeVersionInformation(versionBits);
if (version != null && version.dimension == dimension) {
_version = version;
return version;
}
throw const UCodeDecodeException("Unreadable QR version information");
}