fix: make media controls follow app lifecycle
This commit is contained in:
@@ -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
@@ -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
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user