mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-09-30 05:12:00 +02:00
fix(lyrics): hide controls after five seconds only during playback
This commit is contained in:
@@ -316,6 +316,7 @@ class NowPlayingScreen extends ConsumerStatefulWidget {
|
||||
class _NowPlayingScreenState extends ConsumerState<NowPlayingScreen> {
|
||||
final PageController _pageController = PageController();
|
||||
ProviderSubscription<AsyncValue<MediaItem?>>? _mediaItemSub;
|
||||
ProviderSubscription<bool>? _lyricsPlayingSub;
|
||||
String? _loadedSource;
|
||||
String? _loadedResolvedSource;
|
||||
String? _loadedMetadataPath;
|
||||
@@ -359,6 +360,15 @@ class _NowPlayingScreenState extends ConsumerState<NowPlayingScreen> {
|
||||
inspectUnresolvedContentUri: _currentPage == 1,
|
||||
),
|
||||
);
|
||||
_lyricsPlayingSub = ref.listenManual<bool>(playbackPlayingProvider, (
|
||||
previous,
|
||||
playing,
|
||||
) {
|
||||
if (!playing && _lyricsControlsHidden) {
|
||||
setState(() => _lyricsControlsHidden = false);
|
||||
}
|
||||
_scheduleLyricsControlsHide();
|
||||
});
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||
if (!mounted) return;
|
||||
_loadMetadataForItem(ref.read(currentMediaItemProvider).value);
|
||||
@@ -380,6 +390,7 @@ class _NowPlayingScreenState extends ConsumerState<NowPlayingScreen> {
|
||||
void dispose() {
|
||||
_lyricsIdleTimer?.cancel();
|
||||
_mediaItemSub?.close();
|
||||
_lyricsPlayingSub?.close();
|
||||
_pageController.dispose();
|
||||
_artworkColorsChanged.dispose();
|
||||
super.dispose();
|
||||
@@ -1039,6 +1050,7 @@ class _NowPlayingScreenState extends ConsumerState<NowPlayingScreen> {
|
||||
context.isMornye &&
|
||||
!_landscape &&
|
||||
_currentPage == 1 &&
|
||||
ref.read(playbackPlayingProvider) &&
|
||||
!MediaQuery.accessibleNavigationOf(context);
|
||||
|
||||
void _scheduleLyricsControlsHide() {
|
||||
@@ -1050,7 +1062,7 @@ class _NowPlayingScreenState extends ConsumerState<NowPlayingScreen> {
|
||||
_lyricsPointers.isNotEmpty) {
|
||||
return;
|
||||
}
|
||||
_lyricsIdleTimer = Timer(const Duration(seconds: 3), () {
|
||||
_lyricsIdleTimer = Timer(const Duration(seconds: 5), () {
|
||||
if (!mounted || !_canAutoHideLyricsControls) return;
|
||||
if (ModalRoute.of(context)?.isCurrent == false) {
|
||||
_scheduleLyricsControlsHide();
|
||||
@@ -1394,6 +1406,8 @@ class _NowPlayingScreenState extends ConsumerState<NowPlayingScreen> {
|
||||
if (landscape) {
|
||||
return MornyeLandscapePlayer(
|
||||
page: _currentPage,
|
||||
isPlaying: ref.watch(playbackPlayingProvider),
|
||||
controlsHeldOpen: _lyricsOptionsOpen,
|
||||
onPageChanged: _setMornyePage,
|
||||
artwork: stage(artworkOnly: true),
|
||||
header: _trackHeader(mediaItem, colorScheme, compact: true),
|
||||
|
||||
@@ -17,8 +17,10 @@ class MornyeLandscapePlayer extends StatefulWidget {
|
||||
required this.controls,
|
||||
required this.volume,
|
||||
required this.page,
|
||||
required this.isPlaying,
|
||||
required this.onPageChanged,
|
||||
this.lyricsOptions,
|
||||
this.controlsHeldOpen = false,
|
||||
});
|
||||
|
||||
final Widget artwork;
|
||||
@@ -28,6 +30,8 @@ class MornyeLandscapePlayer extends StatefulWidget {
|
||||
final Widget controls;
|
||||
final Widget volume;
|
||||
final int page;
|
||||
final bool isPlaying;
|
||||
final bool controlsHeldOpen;
|
||||
final ValueChanged<int> onPageChanged;
|
||||
final Widget? lyricsOptions;
|
||||
|
||||
@@ -54,21 +58,26 @@ class _MornyeLandscapePlayerState extends State<MornyeLandscapePlayer> {
|
||||
@override
|
||||
void didUpdateWidget(MornyeLandscapePlayer oldWidget) {
|
||||
super.didUpdateWidget(oldWidget);
|
||||
if (oldWidget.page != widget.page) {
|
||||
if (oldWidget.page != widget.page ||
|
||||
oldWidget.isPlaying != widget.isPlaying) {
|
||||
_actionsVisible = true;
|
||||
_scheduleHide();
|
||||
} else if (oldWidget.controlsHeldOpen != widget.controlsHeldOpen) {
|
||||
_scheduleHide();
|
||||
}
|
||||
}
|
||||
|
||||
void _scheduleHide() {
|
||||
_hideTimer?.cancel();
|
||||
if (widget.page != 1 ||
|
||||
!widget.isPlaying ||
|
||||
widget.controlsHeldOpen ||
|
||||
!_actionsVisible ||
|
||||
_audioOutputOpen ||
|
||||
MediaQuery.accessibleNavigationOf(context)) {
|
||||
return;
|
||||
}
|
||||
_hideTimer = Timer(const Duration(seconds: 3), () {
|
||||
_hideTimer = Timer(const Duration(seconds: 5), () {
|
||||
if (!mounted) return;
|
||||
if (ModalRoute.of(context)?.isCurrent == false) {
|
||||
_scheduleHide();
|
||||
|
||||
Reference in New Issue
Block a user