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
@@ -156,7 +156,7 @@ void main() {
|
||||
expect(controller.progress, closeTo(250 / oeffnenReferenzHoehe, 0.01));
|
||||
expect(find.byType(BackdropFilter), findsOneWidget);
|
||||
|
||||
controller.dragEnd(ctx, -250, 0);
|
||||
controller.dragEnd(ctx, -250, 0, ausVollbild: false);
|
||||
await tester.pumpAndSettle();
|
||||
expect(controller.progress, 1.0);
|
||||
|
||||
|
||||
@@ -98,7 +98,7 @@ void main() {
|
||||
}));
|
||||
|
||||
controller.dragBy(-200);
|
||||
controller.dragEnd(ctx, -200, 0); // Strecke > wischStreckeSchwelle (80)
|
||||
controller.dragEnd(ctx, -200, 0, ausVollbild: false); // Strecke > wischStreckeSchwelle (80)
|
||||
await tester.pumpAndSettle();
|
||||
expect(controller.progress, 1.0);
|
||||
controller.dispose();
|
||||
@@ -116,7 +116,7 @@ void main() {
|
||||
}));
|
||||
|
||||
controller.dragBy(-30);
|
||||
controller.dragEnd(ctx, -30, 0); // unter wischStreckeSchwelle
|
||||
controller.dragEnd(ctx, -30, 0, ausVollbild: false); // unter wischStreckeSchwelle
|
||||
await tester.pumpAndSettle();
|
||||
expect(controller.progress, 0.0);
|
||||
controller.dispose();
|
||||
@@ -136,7 +136,7 @@ void main() {
|
||||
controller.open(ctx);
|
||||
await tester.pumpAndSettle();
|
||||
controller.dragBy(200); // nach unten, Betrag > Referenzhöhe/2
|
||||
controller.dragEnd(ctx, 200, 0);
|
||||
controller.dragEnd(ctx, 200, 0, ausVollbild: true);
|
||||
await tester.pumpAndSettle();
|
||||
expect(controller.progress, 0.0);
|
||||
controller.dispose();
|
||||
@@ -156,7 +156,35 @@ void main() {
|
||||
controller.open(ctx);
|
||||
await tester.pumpAndSettle();
|
||||
controller.dragBy(30);
|
||||
controller.dragEnd(ctx, 30, 0);
|
||||
controller.dragEnd(ctx, 30, 0, ausVollbild: true);
|
||||
await tester.pumpAndSettle();
|
||||
expect(controller.progress, 1.0);
|
||||
controller.dispose();
|
||||
});
|
||||
|
||||
testWidgets(
|
||||
'dragEnd bei bereits vollem Player: schwaches Fingerzittern nach oben '
|
||||
'klappt ihn NICHT zu (asymmetrischer Bug — dragEnd darf die '
|
||||
'Entscheidungsrichtung nicht aus dem Vorzeichen von strecke raten, '
|
||||
'sondern muss den Aufrufer-Kontext kennen)', (tester) async {
|
||||
late PlayerExpansionController controller;
|
||||
late BuildContext ctx;
|
||||
await tester.pumpWidget(mitMediaQuery(false, (context) {
|
||||
ctx = context;
|
||||
controller = PlayerExpansionController(vsync: tester);
|
||||
return const SizedBox();
|
||||
}));
|
||||
|
||||
controller.open(ctx);
|
||||
await tester.pumpAndSettle();
|
||||
// Der Player ist voll offen (progress==1). Der Nutzer verrutscht beim
|
||||
// Versuch, einen Knopf zu treffen, leicht nach oben — eine winzige,
|
||||
// negative Strecke weit unter der Wisch-Schwelle. Das darf gar keine
|
||||
// Zustandsänderung auslösen, weil die Geste viel zu schwach ist — schon
|
||||
// gar nicht ein Zuklappen, das würde "nach oben ziehen schließt den
|
||||
// offenen Player" bedeuten, was es nicht tut.
|
||||
controller.dragBy(-5);
|
||||
controller.dragEnd(ctx, -5, 0, ausVollbild: true);
|
||||
await tester.pumpAndSettle();
|
||||
expect(controller.progress, 1.0);
|
||||
controller.dispose();
|
||||
|
||||
Reference in New Issue
Block a user