payEncode function

String payEncode(
  1. PayDataModel model, [
  2. PayEncodeOptions options = const PayEncodeOptions()
])

Encodes a PayDataModel into a Base32Hex QR string ready for embedding in a QR code image.

final qr = payEncode(
  PayDataModel(
    payments: [
      PaymentOrder(
        amount: 19.99,
        currencyCode: 'EUR',
        bankAccounts: [BankAccount(iban: 'SK9611000000002918599669')],
        beneficiary: Beneficiary(name: 'Acme s.r.o.'),
      ),
    ],
  ),
);

Implementation

String payEncode(PayDataModel model,
    [PayEncodeOptions options = const PayEncodeOptions()]) {
  if (options.deburr) {
    model = _removeDiacritics(model);
  }

  if (options.validate) {
    validatePayDataModel(model, version: options.version);
  }

  final tabbed = paySerialize(model);
  final checked = addChecksum(tabbed);
  final compressed = lzmaCompress(checked);

  // Strip the 13-byte LZMA header - bysquare stores only the body
  final lzmaBody = compressed.sublist(13);

  final output = Uint8List.fromList([
    ...buildBysquareHeader(
      bySquareType: 0x00,
      version: options.version,
      documentType: 0x00,
    ),
    ...buildPayloadLength(checked.length),
    ...lzmaBody,
  ]);

  return base32hexEncode(output, addPadding: false);
}