Die vier zuletzt zurückgestellten Punkte aus der UX-Simulation: - Abbrechen-Knopf für hängende YouTube-Downloads (Future.any gegen ein Abbruch-Signal, Anfrage läuft im Hintergrund aus statt die App zu blockieren) - Punkt am inaktiven Download-Unterreiter, wenn dort etwas im Hintergrund läuft (SubTabs bekommt einen optionalen badges-Parameter) - Versionsnummer unter "Über Melo" (neue Abhängigkeit: package_info_plus) - Mini-Player führt beim Wischen jetzt sichtbar mit und wertet zusätzlich zum Schwung auch die zurückgelegte Strecke aus — ein langsames, aber weites Wischen wurde vorher komplett ignoriert Dabei drei bestehende Widget-Tests korrigiert, die den Download-Tab ohne Provider<DownloadService> aufbauten (hauptmenue_test.dart, home_shell_test.dart, online_screen_test.dart) — lief bisher nur, weil niemand danach fragte; das neue Badge tut das jetzt app-weit. 550 Tests grün (vorher 539), flutter analyze ohne Befund.
51 lines
2.1 KiB
Dart
51 lines
2.1 KiB
Dart
/// Was eine waagerechte Wischbewegung am Mini-Player bewirkt.
|
|
enum Wechsel { vorheriger, naechster }
|
|
|
|
/// Ab welcher Wisch-Geschwindigkeit (Pixel pro Sekunde) eine Geste zählt.
|
|
///
|
|
/// Bewusst nicht null: der Mini-Player ist zugleich ein Knopf, und beim
|
|
/// Antippen wandert der Finger fast immer ein paar Pixel. Ohne Schwelle
|
|
/// spränge bei jedem zweiten Tipp der Titel.
|
|
const wischSchwelle = 300.0;
|
|
|
|
/// Zu welchem Titel eine waagerechte Bewegung führt, oder `null`, wenn sie
|
|
/// zu zaghaft war.
|
|
///
|
|
/// Nach links wischen holt den nächsten Titel herein — so, wie man ein Blatt
|
|
/// zur Seite schiebt und das darunter sichtbar wird.
|
|
Wechsel? titelWechsel(double geschwindigkeit) {
|
|
if (geschwindigkeit.abs() <= wischSchwelle) return null;
|
|
return geschwindigkeit < 0 ? Wechsel.naechster : Wechsel.vorheriger;
|
|
}
|
|
|
|
/// Ob eine senkrechte Bewegung die Vollbild-Wiedergabe öffnet.
|
|
/// Nur nach oben — nach unten ist bewusst unbelegt, damit niemand die
|
|
/// Wiedergabe aus Versehen wegschiebt.
|
|
bool oeffnetVollbild(double geschwindigkeit) =>
|
|
geschwindigkeit < -wischSchwelle;
|
|
|
|
/// Ab welcher zurückgelegten Strecke (in Pixeln) eine langsame, aber
|
|
/// eindeutige Wischbewegung auch ohne Schwung zählt.
|
|
///
|
|
/// Ohne diese Schwelle bekam ein bedächtiges, aber weites Wischen (unter
|
|
/// [wischSchwelle] Pixel pro Sekunde) überhaupt keine Reaktion — für den
|
|
/// Nutzer sah das aus wie ein nicht reagierender Bildschirm statt "zu
|
|
/// langsam gewischt".
|
|
const wischStreckeSchwelle = 80.0;
|
|
|
|
/// Wie [titelWechsel], aber eine ausreichend weite Bewegung zählt zusätzlich
|
|
/// auch bei geringem Schwung.
|
|
Wechsel? titelWechselMitStrecke(double strecke, double geschwindigkeit) {
|
|
final ausSchwung = titelWechsel(geschwindigkeit);
|
|
if (ausSchwung != null) return ausSchwung;
|
|
if (strecke.abs() <= wischStreckeSchwelle) return null;
|
|
return strecke < 0 ? Wechsel.naechster : Wechsel.vorheriger;
|
|
}
|
|
|
|
/// Wie [oeffnetVollbild], aber eine ausreichend weite Bewegung nach oben
|
|
/// zählt zusätzlich auch bei geringem Schwung.
|
|
bool oeffnetVollbildMitStrecke(double strecke, double geschwindigkeit) {
|
|
if (oeffnetVollbild(geschwindigkeit)) return true;
|
|
return strecke < -wischStreckeSchwelle;
|
|
}
|