receiptSheet function

ReceiptSheet receiptSheet(
  1. ReceiptLayout layout, {
  2. int? charsPerLine,
  3. bool brandMark = false,
  4. QrModuleSize qrModuleSize = QrModuleSize.auto,
})

Implementation

ReceiptSheet receiptSheet(ReceiptLayout layout,
    {int? charsPerLine, SheetLogo? logo, bool brandMark = false, QrModuleSize qrModuleSize = QrModuleSize.auto}) {
  final raster = ReceiptGrid.render(layout, charsPerLine: charsPerLine);
  final n = raster.charsPerLine;
  final papier = paperSizeForChars(n, layout.paperSize);
  final leerzeile = SheetLine(text: ' ' * n, bold: false, blank: true);
  SheetBlock block(GridLine z) => z.kind == GridLineKind.qr
      ? SheetQr(payload: z.qr ?? '', widthFraction: qrSheetWidthFraction(z.qr ?? '', papier, moduleSize: qrModuleSize))
      : SheetLine(text: z.text, bold: z.bold, blank: z.kind == GridLineKind.space);

  final bloecke = <SheetBlock>[];
  var i = 0;
  if (logo != null) {
    // Fuehrende Aufdrucke bleiben ganz oben; die Leerzeilen um das Logo sind Vertrag.
    while (i < raster.lines.length && raster.lines[i].kind == GridLineKind.banner) {
      bloecke.add(block(raster.lines[i]));
      i += 1;
    }
    if (i > 0) bloecke.add(leerzeile);
    final mass = logoDimensions(logo, n);
    bloecke.add(SheetLogoBlock(widthFraction: mass.widthFraction, heightLines: mass.heightLines));
    bloecke.add(leerzeile);
  }
  for (; i < raster.lines.length; i++) {
    bloecke.add(block(raster.lines[i]));
  }
  if (brandMark) {
    // Das Raster deckt nur die beiden bekannten Papierbreiten ab
    // (markeRaster). Faende sich hier eine dritte, faellt die Marke weg statt
    // ein Raster in falscher Groesse zu drucken -- derselbe Grundsatz wie
    // beim Firmenlogo: eine Marke ist Zierde, der Beleg ist Pflicht.
    final raster = brandMarkRasters[papier];
    if (raster != null) {
      bloecke.add(leerzeile);
      bloecke.add(SheetBrandMark(width: raster.width, height: raster.height));
    }
  }
  return ReceiptSheet(charsPerLine: n, blocks: bloecke);
}