import 'package:audio_service/audio_service.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../shared/cover.dart'; import '../shared/theme.dart'; import 'audio_handler.dart'; import 'now_playing_screen.dart'; /// Kompakte Wiedergabe-Leiste über der Bottom-Nav. /// Blendet sich aus, wenn nichts läuft. class MiniPlayer extends StatelessWidget { const MiniPlayer({super.key}); @override Widget build(BuildContext context) { final handler = context.read(); return StreamBuilder( stream: handler.mediaItem, builder: (context, snapshot) { final item = snapshot.data; if (item == null) return const SizedBox.shrink(); return Material( color: MeloTheme.surface, child: InkWell( onTap: () => Navigator.of(context).push(MaterialPageRoute( builder: (_) => const NowPlayingScreen(), )), child: SizedBox( height: 60, child: Row( children: [ const SizedBox(width: 8), Padding( padding: const EdgeInsets.all(8), child: CoverImage(artUri: item.artUri, size: 44, radius: 6), ), const SizedBox(width: 8), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(item.title, maxLines: 1, overflow: TextOverflow.ellipsis), Text(item.artist ?? 'Unbekannt', maxLines: 1, overflow: TextOverflow.ellipsis, style: const TextStyle( color: Colors.white54, fontSize: 12)), ], ), ), StreamBuilder( stream: handler.playbackState, builder: (context, snap) { final playing = snap.data?.playing ?? false; return IconButton( icon: Icon(playing ? Icons.pause : Icons.play_arrow), onPressed: playing ? handler.pause : handler.play, ); }, ), ], ), ), ), ); }, ); } }