decode static method

UQrDecodeResult decode(
  1. Uint8List bytes
)

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);
}