Skip to content

Commit

Permalink
fix: less frequent position updates
Browse files Browse the repository at this point in the history
  • Loading branch information
KRTirtho committed Jun 10, 2023
1 parent 09b24cf commit 0a49b56
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions lib/hooks/use_progress.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,28 @@ import 'package:spotube/services/audio_player/audio_player.dart';
final duration = useStream(audioPlayer.durationStream).data ??
durationFuture.data ??
Duration.zero;
final positionFuture = useFuture(audioPlayer.position);
final positionSnapshot = useStream(audioPlayer.positionStream);

final position =
positionSnapshot.data ?? positionFuture.data ?? Duration.zero;
final positionFuture = useFuture(audioPlayer.position);
final position = useState<Duration>(positionFuture.data ?? Duration.zero);

final sliderMax = duration.inSeconds;
final sliderValue = position.inSeconds;
final sliderValue = position.value.inSeconds;

useEffect(() {
// audioPlayer.positionStream is fired every 200ms and only 1s delay is
// enough. Thus only update the position if the difference is more than 1s
var lastPosition = position.value;
return audioPlayer.positionStream.listen((event) {
if (event.inMilliseconds - lastPosition.inMilliseconds < 1000) return;
lastPosition = event;
position.value = event;
}).cancel;
}, []);

return (
progressStatic:
sliderMax == 0 || sliderValue > sliderMax ? 0 : sliderValue / sliderMax,
position: position,
position: position.value,
duration: duration,
bufferProgress: sliderMax == 0 || bufferProgress > sliderMax
? 0
Expand Down

0 comments on commit 0a49b56

Please sign in to comment.