3 Tap-Stellen öffnen den Vollbild-Player jetzt über PlayerExpansionController statt Navigator.push
Zusätzlich test/player/now_playing_heart_test.dart angepasst (Plan-Lücke: nutzt denselben SongZeile-Tap-Pfad, war nicht in Task 3s Datei-Liste erwähnt) — Provider ergänzt, Route für die Layout-Prüfung selbst separat geöffnet, bis Task 5 NowPlayingScreen zu Overlay-Inhalt umbaut.
This commit is contained in:
@@ -9,7 +9,7 @@ import 'package:shared_preferences/shared_preferences.dart';
|
||||
import 'package:melo/downloads/server_titel_screen.dart';
|
||||
import 'package:melo/library/database.dart';
|
||||
import 'package:melo/player/audio_handler.dart';
|
||||
import 'package:melo/player/now_playing_screen.dart';
|
||||
import 'package:melo/player/player_expansion_controller.dart';
|
||||
import 'package:melo/services/navidrome_service.dart';
|
||||
|
||||
/// Ersetzt in [MeloAudioHandler.loadPlaylist] den echten just_audio-Zugriff:
|
||||
@@ -57,10 +57,13 @@ void main() {
|
||||
handler.dispose();
|
||||
});
|
||||
|
||||
Widget wrap(Widget child) => MultiProvider(
|
||||
Widget wrap(Widget child, PlayerExpansionController expansion) =>
|
||||
MultiProvider(
|
||||
providers: [
|
||||
Provider<MeloDb>.value(value: db),
|
||||
Provider<MeloAudioHandler>.value(value: handler),
|
||||
ChangeNotifierProvider<PlayerExpansionController>.value(
|
||||
value: expansion),
|
||||
],
|
||||
child: MaterialApp(home: child),
|
||||
);
|
||||
@@ -68,21 +71,26 @@ void main() {
|
||||
testWidgets('Titel antippen öffnet den Vollbild-Player', (tester) async {
|
||||
final navidrome = NavidromeService()
|
||||
..setCredentials('https://musik.baka-net.de', 'Baka', 'geheim');
|
||||
await tester.pumpWidget(wrap(ServerTitelScreen(
|
||||
titel: 'Ablaze',
|
||||
navidrome: navidrome,
|
||||
holeTitel: () async => const [
|
||||
SubsonicSong(id: 's1', titel: 'Feuer', kuenstler: 'X', dauerSekunden: 120),
|
||||
],
|
||||
)));
|
||||
final expansion = PlayerExpansionController(vsync: tester);
|
||||
addTearDown(expansion.dispose);
|
||||
await tester.pumpWidget(wrap(
|
||||
ServerTitelScreen(
|
||||
titel: 'Ablaze',
|
||||
navidrome: navidrome,
|
||||
holeTitel: () async => const [
|
||||
SubsonicSong(id: 's1', titel: 'Feuer', kuenstler: 'X', dauerSekunden: 120),
|
||||
],
|
||||
),
|
||||
expansion,
|
||||
));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byType(NowPlayingScreen), findsNothing);
|
||||
expect(expansion.progress, 0.0);
|
||||
|
||||
await tester.tap(find.text('Feuer'));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byType(NowPlayingScreen), findsOneWidget);
|
||||
expect(expansion.progress, 1.0);
|
||||
|
||||
// Ohne diesen Abschluss bleibt ein drift-Stream-Abo beim Abbau des
|
||||
// Baums als offener Fake-Timer stehen.
|
||||
|
||||
Reference in New Issue
Block a user