diff --git a/lib/core/widgets/themed_loading_screen.dart b/lib/core/widgets/themed_loading_screen.dart index e1db1dd..8665788 100644 --- a/lib/core/widgets/themed_loading_screen.dart +++ b/lib/core/widgets/themed_loading_screen.dart @@ -7,20 +7,33 @@ class ThemedLoading extends StatelessWidget { Widget build(BuildContext context) { return Container( decoration: const BoxDecoration( - gradient: RadialGradient( - center: Alignment(0, -0.2), - radius: 1.5, + gradient: LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, colors: [ - Color(0xFF2C2C2E), - Color(0xFF000000), + Color(0xFF0F1014), // Deep Space Dark + Color(0xFF181920), // Soft Eerie Black ], - stops: [0.0, 1.0], ), ), - child: const Center( - child: CircularProgressIndicator( - color: Colors.white, - strokeWidth: 3, + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + const CircularProgressIndicator( + color: Color(0xFF007AFF), // Electric Blue (AppColors.primary) + strokeWidth: 3, + ), + const SizedBox(height: 16), + Text( + 'Loading...', + style: TextStyle( + fontFamily: 'Outfit', // Match AppTheme + color: Colors.white.withOpacity(0.7), + fontSize: 14, + ), + ), + ], ), ), ); diff --git a/web/player_lite.html b/web/player_lite.html index 86c4e73..c7866fc 100644 --- a/web/player_lite.html +++ b/web/player_lite.html @@ -471,6 +471,25 @@ } } + // Listen for messages from Flutter + window.addEventListener('message', (event) => { + const data = event.data; + if (!data) return; + + if (data.type === 'play') { + video.play().catch(e => log('Play command failed: ' + e)); + } else if (data.type === 'pause') { + video.pause(); + } else if (data.type === 'set_volume') { + video.volume = Math.max(0, Math.min(1, parseFloat(data.value))); + video.muted = video.volume === 0; + } else if (data.type === 'seek') { + if (isFinite(video.duration)) { + video.currentTime = parseFloat(data.value); + } + } + }); + // Start player initPlayer();