// lib/widgets/global_mini_player.dart import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../services/audio_service.dart'; import '../utils/navigation.dart'; // ⭐ 导入 navigatorKey class GlobalMiniPlayer extends StatelessWidget { const GlobalMiniPlayer({super.key}); @override Widget build(BuildContext context) { final song = context.select((s) => s.currentSong); final isPlaying = context.select((s) => s.isPlaying); final bottomPadding = MediaQuery.of(context).padding.bottom; if (song == null) { return const SizedBox.shrink(); } return Stack( clipBehavior: Clip.none, children: [ Positioned( left: 0, right: 0, bottom: 0, child: Container( height: 60 + bottomPadding, color: const Color(0xFF1A1F1E), ), ), Positioned( left: 0, right: 0, bottom: bottomPadding, child: ClipRRect( borderRadius: const BorderRadius.vertical( bottom: Radius.circular(16), ), child: Container( height: 60, color: const Color(0xFF1A1F1E), child: ClipRRect( borderRadius: BorderRadius.circular(12), child: Material( color: Colors.transparent, child: InkWell( onTap: () { // ⭐ 使用 navigatorKey 直接跳转 navigatorKey.currentState?.pushNamed('/player'); }, highlightColor: Colors.white.withValues(alpha: 0.05), splashColor: Colors.white.withValues(alpha: 0.1), borderRadius: BorderRadius.circular(12), child: Row( children: [ const SizedBox(width: 12), Container( width: 44, height: 44, decoration: BoxDecoration( borderRadius: BorderRadius.circular(4), color: const Color(0xFF2A3332), image: song.artwork != null ? DecorationImage( image: MemoryImage(song.artwork!), fit: BoxFit.cover, ) : null, ), child: song.artwork == null ? const Icon( Icons.music_note, color: Colors.white38, size: 20, ) : null, ), const SizedBox(width: 12), Expanded( child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( song.title, style: const TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: Colors.white, decoration: TextDecoration.none, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), Text( song.artist, style: TextStyle( fontSize: 12, color: Colors.grey[400], decoration: TextDecoration.none, ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ], ), ), IconButton( icon: Icon( isPlaying ? Icons.pause : Icons.play_arrow, color: Colors.white, size: 24, ), onPressed: () { context.read().togglePlay(); }, ), IconButton( icon: const Icon( Icons.playlist_play_outlined, color: Colors.grey, size: 24, ), onPressed: () { // ⭐ 使用 navigatorKey 直接跳转 navigatorKey.currentState?.pushNamed('/playlist'); }, ), const SizedBox(width: 4), ], ), ), ), ), ), ), ), ], ); } }