decode static method
Implementation
static UQrDecodeResult decode(Uint8List bytes) {
final UBitSource bits = UBitSource(bytes);
final StringBuffer result = StringBuffer();
final StringBuffer resultTrailer = StringBuffer();
final List<int> byteSegments = <int>[];
int mode = _asciiEncode;
int? eci;
do {
if (mode == _asciiEncode) {
mode = _decodeAscii(bits, result, resultTrailer);
} else {
switch (mode) {
case _c40Encode:
_decodeC40(bits, result);
break;
case _textEncode:
_decodeText(bits, result);
break;
case _ansiX12Encode:
_decodeAnsiX12(bits, result);
break;
case _edifactEncode:
_decodeEdifact(bits, result);
break;
case _base256Encode:
eci = _decodeBase256(bits, result, byteSegments) ?? eci;
break;
case _eciEncode:
eci = _decodeEci(bits);
break;
default:
throw const UCodeDecodeException("Unsupported Data Matrix mode");
}
mode = _asciiEncode;
}
} while (mode != _padEncode && bits.available > 0);
if (resultTrailer.isNotEmpty) result.write(resultTrailer);
final String text = result.toString();
return UQrDecodeResult(text: text, bytes: byteSegments.isNotEmpty ? Uint8List.fromList(byteSegments) : Uint8List.fromList(utf8.encode(text)), eci: eci);
}