/// 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; }