import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:melo/shared/theme.dart'; /// Die Bildschirm-Überschriften setzten ihre Größe von Hand, während das /// Theme eine eigene Stufe dafür vorhielt — die nie benutzt wurde. Diese /// Regeln halten die Stufenleiter zusammen. void main() { final texte = MeloTheme.dark.textTheme; double groesse(TextStyle? s) => s!.fontSize!; double laufweite(TextStyle? s) => s!.letterSpacing ?? 0; group('Stufenleiter', () { test('wird von oben nach unten kleiner', () { expect(groesse(texte.displaySmall), greaterThan(groesse(texte.headlineSmall))); expect(groesse(texte.headlineSmall), greaterThan(groesse(texte.titleMedium))); expect(groesse(texte.titleMedium), greaterThan(groesse(texte.bodyLarge))); expect(groesse(texte.bodyLarge), greaterThan(groesse(texte.bodyMedium))); expect(groesse(texte.bodyMedium), greaterThan(groesse(texte.bodySmall))); }); test('Fließtext bleibt bei mindestens 12', () { // Darunter wird es auf einem Telefon unlesbar, unabhängig vom Kontrast. expect(groesse(texte.bodySmall), greaterThanOrEqualTo(12)); }); }); group('Laufweite', () { test('große Überschriften stehen enger', () { // Bei großen Graden wirken die Abstände optisch zu weit; ein leicht // negativer Wert lässt die Zeile als Einheit lesen. expect(laufweite(texte.displaySmall), lessThan(0)); expect(laufweite(texte.headlineSmall), lessThan(0)); }); test('die Abschnitts-Beschriftung steht weiter', () { // Sie wird in Großbuchstaben gesetzt, und die brauchen mehr Luft. expect(laufweite(texte.labelLarge), greaterThan(0)); }); test('Fließtext bleibt unangetastet', () { expect(laufweite(texte.bodyLarge), 0); expect(laufweite(texte.bodyMedium), 0); }); }); group('Gewichte', () { test('Überschriften sind kräftiger als Fließtext', () { expect(texte.displaySmall!.fontWeight!.value, greaterThan(texte.bodyLarge!.fontWeight?.value ?? 400)); }); }); test('die Titelleiste folgt derselben Stufe wie eine Überschrift', () { // Sonst hätte derselbe Rang zwei verschiedene Schriftbilder. final leiste = MeloTheme.dark.appBarTheme.titleTextStyle!; expect(leiste.fontSize, groesse(texte.headlineSmall)); expect(leiste.letterSpacing, laufweite(texte.headlineSmall)); expect(leiste.fontWeight, texte.headlineSmall!.fontWeight); }); }