addQrCode method

void addQrCode(
  1. String data, {
  2. QRSize? size,
  3. QrModulGroesse groesse = QrModulGroesse.auto,
  4. bool modell1 = false,
  5. int myPosGroesse = 280,
})

Nativer QR-Befehl mit gerechneter Modulgroesse.

size setzt die Groesse fest und schaltet die Rechnung ab -- fuer Aufrufer, die genau wissen, was ihr Geraet kann. Ohne size entscheidet QrMass: so gross wie moeglich, gedeckelt durch groesse. Vorher stand hier fest QRSize.size6, unabhaengig von der Papierbreite; ein Beleg-QR mit realer Nutzlast (57 Module) wurde damit 390 Punkte breit und verschwand auf jedem 58-mm-Drucker (384 Punkte) spurlos.

modell1 waehlt den aelteren Symboltyp, siehe QRCode.

Fehlerkorrektur ist M -- dieselbe Stufe wie Blatt, ePOS und Bildweg. Mit der Generator-Vorgabe L haette der Drucker bei mancher Nutzlast ein kleineres Symbol gesetzt, als das Blatt ihm Platz gibt.

myPosGroesse ist die Bildbreite fuer den myPOS-Terminaldruck, der den QR selbst rendert; Vorgabe 280 wie bisher.

Implementation

void addQrCode(String data,
    {QRSize? size,
    QrModulGroesse groesse = QrModulGroesse.auto,
    bool modell1 = false,
    int myPosGroesse = 280}) {
  if (data.isEmpty) {
    _qrAusfall(data, 'leere Nutzlast');
    return;
  }
  QRSize gewaehlt;
  if (size != null) {
    gewaehlt = size;
  } else {
    final QrGroesse mass = QrMass.fuer(
      nutzlast: data,
      papierbreitePunkte: paperSize.druckPunkte,
      groesse: groesse,
    );
    if (!mass.passt) {
      // Synchron gerufen bleibt hier kein Bildweg -- der Aufrufer bekommt
      // den Ausfall gemeldet und die Belegdaten in Klarschrift. Ueber
      // [_qrNachModus] kommt es dazu nicht, der weicht vorher aufs Bild aus.
      _qrAusfall(data,
          'QR mit ${mass.module} Modulen ist fuer ${paperSize.mm} mm zu breit');
      return;
    }
    if (mass.unterMindestmass) {
      qrAusweich = 'QR mit ${mass.module} Modulen passt nur mit '
          '${mass.punkte} Punkten je Modul -- unter dem Mindestmass von '
          '${QrMass.mindestPunkte}';
    }
    gewaehlt = QRSize(mass.punkte!);
  }
  try {
    bytes.add(Uint8List.fromList(
        generator.qrcode(data, size: gewaehlt, cor: QRCorrection.M, modell1: modell1)));
    myPosPaper.addQrCode(data, size: myPosGroesse);
  } catch (e) {
    _qrAusfall(data, e);
  }
}