Cover-Farbe, Teilen aus YouTube, Android Auto, geschärfte Typografie

P3-Liste aus dem UX-Review: Player nimmt Cover-Farbe auf, "Teilen" aus
YouTube trägt die Adresse in den Downloader ein, Android Auto blättert
durch die Bibliothek, Laufweite der Typografie geschärft, Überschriften
vereinheitlicht. 533 Tests grün, flutter analyze ohne Befund.
This commit is contained in:
Hermes (Server)
2026-08-25 09:09:27 +02:00
parent 490e73ce41
commit 60c57577a3
22 changed files with 1040 additions and 40 deletions
+41 -10
View File
@@ -93,28 +93,53 @@ class MeloTheme {
/// Flächen sauberer als ein Schatten, den man ohnehin nicht sieht.
static Border get hairline => Border.all(color: border, width: 1);
/// Die Stufenleiter der Schrift.
///
/// Melo bleibt bei der System-Schrift (auf Android Roboto): sie ist immer
/// da, trägt jede Sprache und kostet nichts an App-Größe. Geschärft wird
/// stattdessen, was ohne eigene Schrift geht — Größenabstände, Gewichte
/// und vor allem die **Laufweite**: große Grade wirken mit den Standard-
/// abständen auseinandergezogen, Großbuchstaben dagegen gedrängt.
static TextTheme get _textTheme => const TextTheme(
// Bildschirm-Überschrift ("Meine Musik", "Online").
// Bildschirm-Überschrift ("Favoriten", "Download", "Suchen").
// Etwas enger gesetzt, damit die Zeile als ein Wortbild steht.
displaySmall: TextStyle(
fontSize: 28, height: 1.15, fontWeight: FontWeight.w700, color: text1),
fontSize: 26,
height: 1.15,
fontWeight: FontWeight.w700,
letterSpacing: -0.4,
color: text1),
// Titelleiste, Kopf eines Sheets.
headlineSmall: TextStyle(
fontSize: 22, height: 1.2, fontWeight: FontWeight.w700, color: text1),
fontSize: 22,
height: 1.2,
fontWeight: FontWeight.w700,
letterSpacing: -0.3,
color: text1),
// Hervorgehobene Zeile ("Shuffle-Wiedergabe").
titleMedium: TextStyle(
fontSize: 17, height: 1.3, fontWeight: FontWeight.w600, color: text1),
// Titel in einer Liste.
bodyLarge: TextStyle(fontSize: 15, height: 1.4, color: text1),
fontSize: 17,
height: 1.3,
fontWeight: FontWeight.w600,
letterSpacing: -0.1,
color: text1),
// Titel in einer Liste. Zeilenhöhe bleibt bei 1,4 — dass Fließtext
// nicht enger gesetzt wird, hält `theme_kontrast_test.dart` als
// Lesbarkeitsregel fest, und die ist älter als diese Politur.
bodyLarge: TextStyle(
fontSize: 15, height: 1.4, letterSpacing: 0, color: text1),
// Untertitel in einer Liste.
bodyMedium: TextStyle(fontSize: 13, height: 1.35, color: text2),
bodyMedium: TextStyle(
fontSize: 13, height: 1.35, letterSpacing: 0, color: text2),
// Beiwerk: Anzahl, Dauer.
bodySmall: TextStyle(fontSize: 12, height: 1.3, color: text3),
// Abschnitts-Beschriftung, Knopftext.
// Abschnitts-Beschriftung, Knopftext. Wird in Großbuchstaben
// gesetzt — und die brauchen mehr Luft, nicht weniger.
labelLarge: TextStyle(
fontSize: 12,
height: 1.2,
fontWeight: FontWeight.w600,
letterSpacing: 0.4,
letterSpacing: 0.6,
color: text3),
);
@@ -138,8 +163,14 @@ class MeloTheme {
backgroundColor: black,
surfaceTintColor: Colors.transparent,
centerTitle: false,
// Dieselbe Stufe wie eine Überschrift — sonst hätte derselbe Rang
// zwei verschiedene Schriftbilder.
titleTextStyle: TextStyle(
fontSize: 22, height: 1.2, fontWeight: FontWeight.w700, color: text1),
fontSize: 22,
height: 1.2,
fontWeight: FontWeight.w700,
letterSpacing: -0.3,
color: text1),
),
listTileTheme: const ListTileThemeData(
contentPadding: EdgeInsets.symmetric(horizontal: MeloSpace.md),