Fix: PlayerExpansionController.dragEnd rät Öffnen/Schließen nicht mehr aus Vorzeichen
Bug (Code-Review, P0-nah): dragEnd() wählte die Entscheidungslogik allein über das Vorzeichen von strecke. Bei bereits vollständig offenem Player klappte ein schwaches, versehentliches Fingerzittern nach oben (kleine negative Strecke, weit unter der Wisch-Schwelle) den Player ungewollt zu, weil das Vorzeichen in den ÖFFNEN-Zweig führte statt in den (korrekten) Schließen-Zweig, der bei so einer schwachen Geste keine Wirkung hätte. dragEnd() bekommt jetzt den Pflichtparameter `ausVollbild`, der den Aufrufer-Kontext explizit benennt statt ihn zu erraten. mini_player.dart (Öffnen-Geste) ruft mit ausVollbild: false, now_playing_screen.dart (Schließen-Geste) mit ausVollbild: true. Test zuerst (RED mit der alten 3-Parameter-Signatur reproduziert, dann GREEN nach dem Fix): test/player/player_expansion_controller_test.dart. Bestehende Tests (player_expansion_controller_test.dart, home_shell_expansion_test.dart) an die neue Signatur angepasst. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SM6e73V9ZethPiqHSocxUA
This commit is contained in:
co-authored by
Claude Sonnet 5
parent
1734a656a1
commit
6687f2f67c
@@ -35,16 +35,22 @@ class PlayerExpansionController extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// [strecke]/[geschwindigkeit] wie in wischen.dart (negativ = nach oben).
|
||||
/// Bei einer Öffnen-Geste (strecke <= 0) direkt über
|
||||
/// [oeffnetVollbildMitStrecke] entschieden; bei einer Schließen-Geste
|
||||
/// (strecke >= 0, im Vollbild-Player nach unten gezogen) über dieselbe
|
||||
/// Funktion mit gespiegeltem Vorzeichen — "stark genug nach unten" ist
|
||||
/// spiegelbildlich zu "stark genug nach oben". Fliegt danach mit der
|
||||
/// echten Loslass-Geschwindigkeit als Startimpuls zum entschiedenen Ziel.
|
||||
void dragEnd(BuildContext context, double strecke, double geschwindigkeit) {
|
||||
final zielIstOffen = strecke <= 0
|
||||
? oeffnetVollbildMitStrecke(strecke, geschwindigkeit)
|
||||
: !oeffnetVollbildMitStrecke(-strecke, -geschwindigkeit);
|
||||
/// [ausVollbild] benennt den Aufrufer-Kontext explizit, statt ihn aus dem
|
||||
/// Vorzeichen von [strecke] zu raten (früherer Bug: bei bereits offenem
|
||||
/// Player klappte ein schwaches, versehentliches Aufwärtszittern — negative
|
||||
/// Strecke, weit unter der Schwelle — den Player zu, weil das Vorzeichen
|
||||
/// allein in den ÖFFNEN-Zweig führte, der bei so einer schwachen Geste
|
||||
/// `false` liefert). `false` (Mini-Player, Öffnen-Geste) entscheidet direkt
|
||||
/// über [oeffnetVollbildMitStrecke]; `true` (Vollbild-Player, Schließen-
|
||||
/// Geste) über dieselbe Funktion mit gespiegeltem Vorzeichen — "stark genug
|
||||
/// nach unten" ist spiegelbildlich zu "stark genug nach oben". Fliegt
|
||||
/// danach mit der echten Loslass-Geschwindigkeit als Startimpuls zum
|
||||
/// entschiedenen Ziel.
|
||||
void dragEnd(BuildContext context, double strecke, double geschwindigkeit,
|
||||
{required bool ausVollbild}) {
|
||||
final zielIstOffen = ausVollbild
|
||||
? !oeffnetVollbildMitStrecke(-strecke, -geschwindigkeit)
|
||||
: oeffnetVollbildMitStrecke(strecke, geschwindigkeit);
|
||||
if (MediaQuery.disableAnimationsOf(context)) {
|
||||
_animation.value = zielIstOffen ? 1.0 : 0.0;
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user