// lib/main.dart import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:media_kit/media_kit.dart'; import 'services/audio_service.dart'; import 'services/playback_service.dart'; import 'pages/home_page.dart'; import 'widgets/global_mini_player.dart'; // ✅ 全局导航键 final GlobalKey navigatorKey = GlobalKey(); void main() { WidgetsFlutterBinding.ensureInitialized(); try { MediaKit.ensureInitialized(); PlaybackService().init(); } catch (e, stack) { print('❌ 初始化失败: $e'); print(stack); runApp( MaterialApp( home: Scaffold( backgroundColor: const Color(0xFF0E1211), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon(Icons.error_outline, size: 64, color: Colors.red[300]), const SizedBox(height: 16), Text( '应用初始化失败', style: TextStyle(color: Colors.white, fontSize: 20), ), const SizedBox(height: 8), Text( '$e', style: TextStyle(color: Colors.grey[400], fontSize: 14), textAlign: TextAlign.center, ), ], ), ), ), ), ); return; } FlutterError.onError = (details) { print('❌ Flutter Error: ${details.exception}'); print('Stack: ${details.stack}'); }; runApp( ChangeNotifierProvider( create: (_) => AudioService(), child: const QTPlayerApp(), ), ); } class QTPlayerApp extends StatelessWidget { const QTPlayerApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: '清听', navigatorKey: navigatorKey, // ✅ 设置导航键 theme: ThemeData( brightness: Brightness.dark, primaryColor: const Color(0xFF7C9A9E), colorScheme: const ColorScheme.dark( primary: Color(0xFF7C9A9E), secondary: Color(0xFFB8D4D0), surface: Color(0xFF1A1F1E), onSurface: Colors.white, ), useMaterial3: true, ), home: const HomePage(), builder: (context, child) { return Overlay( initialEntries: [ OverlayEntry( builder: (context) => Stack( children: [ Positioned.fill(child: child!), const Positioned( left: 0, right: 0, bottom: 0, child: GlobalMiniPlayer(), ), ], ), ), ], ); }, ); } }