From 24032b4368106bdbbe2b5f5e89174eb98cf97ff2 Mon Sep 17 00:00:00 2001 From: aidewoode Date: Tue, 19 Mar 2024 17:29:29 +0800 Subject: [PATCH] Fix progress slider lagged issue on player --- .../android/compose/player/PlayerControl.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/blackcandy/android/compose/player/PlayerControl.kt b/app/src/main/java/org/blackcandy/android/compose/player/PlayerControl.kt index c2960c3..a3ff9c6 100644 --- a/app/src/main/java/org/blackcandy/android/compose/player/PlayerControl.kt +++ b/app/src/main/java/org/blackcandy/android/compose/player/PlayerControl.kt @@ -12,6 +12,10 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource @@ -35,6 +39,8 @@ fun PlayerControl( onSeek: (Double) -> Unit, ) { val progressValue = if (duration > 0) (currentPosition / duration).toFloat() else 0f + var progressValueState by remember { mutableFloatStateOf(0f) } + val currentPositionText = if (enabled) DurationFormatter.string(currentPosition) else NONE_DURATION_TEXT val durationText = if (enabled) DurationFormatter.string(duration) else NONE_DURATION_TEXT @@ -42,10 +48,14 @@ fun PlayerControl( modifier = modifier, ) { Slider( - value = progressValue, + value = if (progressValueState == 0f) progressValue else progressValueState, enabled = enabled, onValueChange = { - onSeek(duration * it) + progressValueState = it + }, + onValueChangeFinished = { + onSeek(duration * progressValueState) + progressValueState = 0f }, )