From c7d8ed567a9bd9b23098ecab7ed923e30f66f72f Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Tue, 9 Jul 2024 21:17:49 +0600 Subject: [PATCH] fix: lyrics page doesn't scroll to top after song ends #885 --- lib/pages/lyrics/synced_lyrics.dart | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/lib/pages/lyrics/synced_lyrics.dart b/lib/pages/lyrics/synced_lyrics.dart index 21796725..c2bf7b81 100644 --- a/lib/pages/lyrics/synced_lyrics.dart +++ b/lib/pages/lyrics/synced_lyrics.dart @@ -1,3 +1,5 @@ +import 'dart:async'; + import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:gap/gap.dart'; @@ -56,7 +58,11 @@ class SyncedLyrics extends HookConsumerWidget { ref.listen( audioPlayerProvider.select((s) => s.activeTrack), (previous, next) { - controller.scrollToIndex(0); + controller.animateTo( + 0, + duration: const Duration(milliseconds: 500), + curve: Curves.easeInOut, + ); ref.read(syncedLyricsDelayProvider.notifier).state = 0; }, ); @@ -69,6 +75,23 @@ class SyncedLyrics extends HookConsumerWidget { final bodyTextTheme = textTheme.bodyLarge?.copyWith( color: palette.bodyTextColor, ); + + useEffect(() { + StreamSubscription? subscription; + WidgetsBinding.instance.addPostFrameCallback((_) { + subscription = audioPlayer.positionStream.listen((event) { + if (event > Duration.zero) return; + controller.animateTo( + 0, + duration: const Duration(milliseconds: 500), + curve: Curves.easeInOut, + ); + }); + }); + + return subscription?.cancel; + }, [controller]); + return Stack( children: [ CustomScrollView(