decodeRow method
Implementation
U1DResult? decodeRow(UBitArray row) {
final List<int>? startRange = UUpcEanReader._findStartGuardPattern(row);
if (startRange == null) return null;
final StringBuffer result = StringBuffer();
final Int32List counters = Int32List(4);
int rowOffset = startRange[1];
int lgPatternFound = 0;
try {
for (int x = 0; x < 6; x++) {
final int bestMatch = UUpcEanReader._decodeDigit(row, counters, rowOffset, UUpcEanPatterns.lAndGPatterns);
result.writeCharCode(48 + bestMatch % 10);
for (final int counter in counters) {
rowOffset += counter;
}
if (bestMatch >= 10) lgPatternFound |= 1 << (5 - x);
}
} catch (_) {
return null;
}
int numSys = -1;
for (int system = 0; system <= 1; system++) {
for (int digit = 0; digit < 10; digit++) {
if (lgPatternFound == UUpcEanPatterns.numsysAndCheckDigit[system][digit]) {
numSys = system;
break;
}
}
if (numSys >= 0) break;
}
if (numSys < 0) return null;
final List<int>? endRange = UUpcEanReader._findGuardPattern(row, rowOffset, true, UUpcEanPatterns.endPattern);
if (endRange == null) return null;
final String compressed = "$numSys${result.toString()}";
final String expanded = _expand(compressed);
if (expanded.isEmpty) return null;
final String full = expanded + _checkDigit(expanded);
if (!UUpcEanPatterns.checksum(full)) return null;
return U1DResult(UCodeFormat.upcE, "$compressed${_checkDigit(expanded)}", startRange[0].toDouble(), endRange[1].toDouble());
}