Bernds Entscheidungen 2026-10-07: - theme.dart: ThemeVariant (Dunkel = neues weiches Dunkelgrau als Standard, Schwarz = bisheriges Fast-Schwarz, Hell) mit PyramidPalette; Nebentexte kontrastreicher. Alte Einstellung theme_dark wird uebernommen (dunkel -> weiches Dunkel). Fest verdrahtete Dunkelfarben im Profil-Popup und GIF-Picker folgen jetzt dem Farbmodus. - appearance.dart: Schriftgroesse = Pyramid-Regler x Systemeinstellung (Handy-Standard 115 %, PC 100 %), MessageStyle Automatisch/Sprechblasen/ Liste, gemeinsame isMobileLayout-Regel. - message_bubbles.dart: Sprechblasen-Darstellung (eigene rechts in Akzentfarbe, Gruppen mit Name + Avatar, Bilder ohne Blase in voller Groesse); Listen-Darstellung unveraendert, Weiche in MessageGroup. - Formatierte Nachrichten (u. a. Antworten) nutzten RichText ohne Schriftskalierung -> erschienen kleiner; jetzt Text.rich. - Einstellungen auf dem Handy als ganze Seite, Schalter unter dem Text. - UI-Durchlauf um Liste/Hell/Gruppe/Einstellungen erweitert; Tests fuer Theme-Varianten, Uebernahme alter Werte, Schriftfaktor, Darstellung. Co-Authored-By: Claude Opus 5.5 <[email protected]>
74 lines
2.6 KiB
Dart
74 lines
2.6 KiB
Dart
import 'package:flutter/widgets.dart';
|
|
|
|
/// Darstellungs-Einstellungen, die nicht reine Farben sind (die stehen in
|
|
/// theme.dart): Handy-Layout-Erkennung, Schriftgröße, Nachrichten-Darstellung.
|
|
|
|
/// Unterhalb dieser Breite (oder sehr flach, z. B. Handy quer) zeigt Pyramid
|
|
/// das Handy-Layout (eine Spalte, Chat als eigene Seite).
|
|
bool isMobileLayout(Size size) => size.width < 900 || size.height < 500;
|
|
|
|
// ── Schriftgröße ───────────────────────────────────────────────────────────
|
|
|
|
/// Standard-Schriftfaktor, solange der Nutzer nichts eingestellt hat: auf dem
|
|
/// Handy größer (Bernds Wunsch 2026-10-07: ≈ 16 statt 14 px), am PC wie bisher.
|
|
double defaultTextScale({required bool mobile}) => mobile ? 1.15 : 1.0;
|
|
|
|
const minTextScale = 0.85;
|
|
const maxTextScale = 1.5;
|
|
|
|
/// Kombiniert die Schriftgröße des Systems (Handy-Einstellung) mit dem
|
|
/// Pyramid-eigenen Regler: erst Pyramid-Faktor, dann die (ggf. nichtlineare)
|
|
/// Systemskalierung.
|
|
class PyramidTextScaler extends TextScaler {
|
|
const PyramidTextScaler(this.system, this.factor);
|
|
|
|
final TextScaler system;
|
|
final double factor;
|
|
|
|
@override
|
|
double scale(double fontSize) => system.scale(fontSize * factor);
|
|
|
|
@override
|
|
// ignore: deprecated_member_use
|
|
double get textScaleFactor => system.textScaleFactor * factor;
|
|
|
|
@override
|
|
bool operator ==(Object other) =>
|
|
other is PyramidTextScaler &&
|
|
other.system == system &&
|
|
other.factor == factor;
|
|
|
|
@override
|
|
int get hashCode => Object.hash(system, factor);
|
|
}
|
|
|
|
// ── Nachrichten-Darstellung ────────────────────────────────────────────────
|
|
|
|
/// Wie Nachrichten im Chat aussehen (Einstellungen → Erscheinungsbild).
|
|
enum MessageStyle {
|
|
/// Handy: Sprechblasen, PC: Liste.
|
|
auto,
|
|
|
|
/// Sprechblasen wie WhatsApp/Signal (eigene rechts, andere links).
|
|
bubbles,
|
|
|
|
/// Liste wie Discord/Element (Name + Text untereinander).
|
|
list;
|
|
|
|
String get label => switch (this) {
|
|
MessageStyle.auto => 'Automatisch',
|
|
MessageStyle.bubbles => 'Sprechblasen',
|
|
MessageStyle.list => 'Liste',
|
|
};
|
|
|
|
/// Tatsächlich anzuwendende Darstellung.
|
|
bool useBubbles({required bool mobile}) => switch (this) {
|
|
MessageStyle.auto => mobile,
|
|
MessageStyle.bubbles => true,
|
|
MessageStyle.list => false,
|
|
};
|
|
|
|
static MessageStyle fromName(String? name) => MessageStyle.values
|
|
.firstWhere((v) => v.name == name, orElse: () => MessageStyle.auto);
|
|
}
|