PosThemeData.fromSettings constructor

PosThemeData.fromSettings(
  1. PosBusinessSettings business, {
  2. PosDeviceSettings? device,
})

Das Thema aus den Einstellungen. device steuert, was nur dieses Gerät betrifft (Kachelhöhe); ohne es gelten die Vorgaben.

Implementation

factory PosThemeData.fromSettings(PosBusinessSettings business, {PosDeviceSettings? device}) {
  final modus = modeFor(business.theme);
  final scharf = modus == KdMode.contrast;

  // **Die Marke steht fest.** Die Knöpfe, mit denen kassiert wird, sind
  // Teil des Produkts: Kassen, die einander nicht mehr ähneln, kosten jeden
  // neuen Kassier eine Eingewöhnung — und eine Hausfarbe, auf der „Bar
  // passend" nicht mehr lesbar ist, merkt niemand vor dem Tresen.
  // `business.color` bleibt im Datenmodell (Panel und Rechnungs-PDF lesen
  // es), färbt hier aber nichts mehr.
  return PosThemeData(
    theme: business.theme,
    mode: modus,
    fontScale: fontScales[business.fontSize]!,
    // **Mal Schriftfaktor.** Die Höhe einer Kachel ist keine feste Zahl,
    // sondern das, was Name und Preis brauchen. Bei Schrift XL in eine
    // Kachel für Schrift M gepresst, wird dem Namen die Unterlänge
    // abgeschnitten — und „Leistung" ohne das g liest sich falsch.
    tileHeight: tileHeights[device?.tileHeight ?? PosTileHeight.m]! * fontScales[business.fontSize]!,
    extraColumns: device?.extraColumns ?? 0,
    // Radien kommen aus dem Design-System und sind in jedem Modus gleich;
    // der Kontrast-Modus schärft Ränder und nimmt Schatten, sonst nichts.
    radius: KdForm.radiusLg,
    radiusTile: KdForm.radius,
    radiusSmall: KdForm.radius,
    lineWidth: scharf ? 2 : KdForm.borderWidth,
    shadowDepth: scharf ? 0 : (modus == KdMode.dark ? 0.5 : 1),
    tileStyle: business.tileStyle,
    emoji: business.emoji,
    categoryColors: business.categoryColors,
  );
}