decodeRow method
Implementation
U1DResult? decodeRow(UBitArray row) {
final List<int>? startRange = _decodeStart(row);
if (startRange == null) return null;
final List<int>? endRange = _decodeEnd(row);
if (endRange == null) return null;
final StringBuffer result = StringBuffer();
int payloadStart = startRange[1];
final int payloadEnd = endRange[0];
final Int32List counterDigitPair = Int32List(10);
final Int32List counterBlack = Int32List(5);
final Int32List counterWhite = Int32List(5);
while (payloadStart < payloadEnd) {
try {
U1DReader.recordPattern(row, payloadStart, counterDigitPair);
} catch (_) {
return null;
}
for (int k = 0; k < 5; k++) {
counterBlack[k] = counterDigitPair[k * 2];
counterWhite[k] = counterDigitPair[k * 2 + 1];
}
final int blackDigit = _decodeDigit(counterBlack);
final int whiteDigit = _decodeDigit(counterWhite);
if (blackDigit < 0 || whiteDigit < 0) return null;
result
..writeCharCode(48 + blackDigit)
..writeCharCode(48 + whiteDigit);
for (final int counter in counterDigitPair) {
payloadStart += counter;
}
}
final String text = result.toString();
if (text.length < 6 || text.length.isOdd) return null;
return U1DResult(UCodeFormat.itf, text, startRange[1].toDouble(), endRange[0].toDouble());
}