QrValidationResult.fromPayload constructor
QrValidationResult.fromPayload({
- required QrPayload payload,
- required int typeNumber,
- required QrErrorCorrectLevel errorCorrectLevel,
Implementation
factory QrValidationResult.fromPayload({
required QrPayload payload,
required int typeNumber,
required QrErrorCorrectLevel errorCorrectLevel,
}) {
RangeError.checkValueInInterval(typeNumber, 1, 40, "typeNumber");
final int requiredBitsFor1 = payload.calculateRequiredBits(1);
final int requiredBitsFor10 = payload.calculateRequiredBits(10);
final int requiredBitsFor27 = payload.calculateRequiredBits(27);
int getRequiredBits(int type) {
if (type < 10) return requiredBitsFor1;
if (type < 27) return requiredBitsFor10;
return requiredBitsFor27;
}
final List<int> validTypes = <int>[];
for (int type = 1; type <= 40; type++) {
final int required = getRequiredBits(type);
final int capacity = QrRsBlock.getTotalDataBits(type, errorCorrectLevel);
if (required <= capacity) {
for (int t = type; t <= 40; t++) {
validTypes.add(t);
}
break;
}
}
final List<QrErrorCorrectLevel> validErrorLevels = <QrErrorCorrectLevel>[];
for (final QrErrorCorrectLevel level in QrErrorCorrectLevel.values) {
final int requiredForType = getRequiredBits(typeNumber);
final int capacity = QrRsBlock.getTotalDataBits(typeNumber, level);
if (requiredForType <= capacity) {
validErrorLevels.add(level);
}
}
QrCode? code;
if (validTypes.contains(typeNumber) && validErrorLevels.contains(errorCorrectLevel)) {
code = QrCode(
payload: payload,
errorCorrectLevel: errorCorrectLevel,
minTypeNumber: typeNumber,
);
}
return QrValidationResult._(
qrCode: code,
validTypeNumbers: List<int>.unmodifiable(validTypes),
validErrorCorrectLevels: List<QrErrorCorrectLevel>.unmodifiable(validErrorLevels),
);
}