compute static method
QrSizing
compute({
- required int paperWidthDots,
- required int moduleCount,
- 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);
}