fix: make media controls follow app lifecycle

This commit is contained in:
edde746
2025-11-14 23:10:05 +01:00
parent a618218828
commit 0101dbde71
3 changed files with 38 additions and 4 deletions
+35 -1
View File
@@ -44,7 +44,8 @@ class VideoPlayerScreen extends StatefulWidget {
State<VideoPlayerScreen> createState() => VideoPlayerScreenState();
}
class VideoPlayerScreenState extends State<VideoPlayerScreen> {
class VideoPlayerScreenState extends State<VideoPlayerScreen>
with WidgetsBindingObserver {
Player? player;
VideoController? controller;
bool _isPlayerInitialized = false;
@@ -91,6 +92,9 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> {
appLogger.d('Preferred subtitle track: $subtitleDesc');
}
// Register app lifecycle observer
WidgetsBinding.instance.addObserver(this);
// Initialize player asynchronously with buffer size from settings
_initializePlayer();
}
@@ -121,6 +125,33 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> {
});
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
switch (state) {
case AppLifecycleState.inactive:
case AppLifecycleState.paused:
// Clear media controls when app goes to background or screen locks
// (we don't support background playback)
OsMediaControls.clear();
appLogger.d('Media controls cleared due to app lifecycle state: $state');
break;
case AppLifecycleState.resumed:
// Restore media controls when app is resumed
if (_isPlayerInitialized && mounted) {
_updateMediaMetadata();
_updateMediaControlsPlaybackState();
appLogger.d('Media controls restored on app resume');
}
break;
case AppLifecycleState.detached:
case AppLifecycleState.hidden:
// No action needed for these states
break;
}
}
Future<void> _initializePlayer() async {
try {
// Load buffer size from settings
@@ -650,6 +681,9 @@ class VideoPlayerScreenState extends State<VideoPlayerScreen> {
@override
void dispose() {
// Unregister app lifecycle observer
WidgetsBinding.instance.removeObserver(this);
// Stop progress tracking
_progressTimer?.cancel();
+2 -2
View File
@@ -644,8 +644,8 @@ packages:
dependency: "direct main"
description:
path: "."
ref: "53d803e1c228eb7eab9ca642119d404c21f4a52f"
resolved-ref: "53d803e1c228eb7eab9ca642119d404c21f4a52f"
ref: a196b022dcbcc3433bae9233be179f02062327e7
resolved-ref: a196b022dcbcc3433bae9233be179f02062327e7
url: "https://github.com/edde746/os-media-controls"
source: git
version: "0.0.2"
+1 -1
View File
@@ -31,7 +31,7 @@ dependencies:
os_media_controls:
git:
url: https://github.com/edde746/os-media-controls
ref: 53d803e1c228eb7eab9ca642119d404c21f4a52f
ref: a196b022dcbcc3433bae9233be179f02062327e7
dependency_overrides:
media_kit: