compute static method

QrSizing compute({
  1. required int paperWidthDots,
  2. required int moduleCount,
  3. QrModuleSize moduleSize = QrModuleSize.auto,
})

Groesste Modulgroesse, mit der moduleCount Module samt Ruhezone in paperWidthDots passen, gedeckelt durch moduleSize.

Wirft bei sinnlosen Eingaben: eine Papierbreite von 0 oder ein Symbol ohne Module ist ein Programmierfehler, und ein still zurueckgegebenes "passt nicht" haette ihn als Druckerproblem getarnt.

Implementation

static QrSizing compute({
  required int paperWidthDots,
  required int moduleCount,
  QrModuleSize moduleSize = QrModuleSize.auto,
}) {
  if (paperWidthDots <= 0) {
    throw ArgumentError.value(paperWidthDots, 'papierbreitePunkte', 'muss positiv sein');
  }
  if (moduleCount <= 0) {
    throw ArgumentError.value(moduleCount, 'moduleAnzahl', 'muss positiv sein');
  }
  final int gesamtModule = moduleCount + quietZoneModules * 2;
  final int passend = paperWidthDots ~/ gesamtModule;
  if (passend < exceptionModuleDots) {
    return QrSizing._(null, moduleCount, 0, false);
  }
  final int deckel = moduleSize.capDots.clamp(exceptionModuleDots, maxModuleDots);
  final int punkte = passend < minModuleDots ? exceptionModuleDots : (passend < deckel ? passend : deckel);
  return QrSizing._(punkte, moduleCount, gesamtModule * punkte, punkte < minModuleDots);
}