fix: 修复阅读菜单滑块同步问题

This commit is contained in:
HapeLee
2026-06-14 00:36:37 +08:00
parent 1beefc59a2
commit 242fba70e8
@@ -1729,28 +1729,45 @@ private fun MenuBottomBar(
val sliderMax = seekMax.toFloat().coerceAtLeast(1f)
var sliderValue by remember { mutableFloatStateOf(state.seekProgress.coerceIn(0, seekMax).toFloat()) }
var sliderDragging by remember { mutableStateOf(false) }
var previewPageIndex by remember { mutableIntStateOf(state.seekProgress.coerceIn(0, seekMax)) }
val toolButtonsBottomPadding = if (buttonGlassEnabled) 6.dp else 0.dp
val contentBottomPadding = if (bottomPadding > toolButtonsBottomPadding) {
bottomPadding - toolButtonsBottomPadding
} else {
0.dp
}
val progressBarBehavior = ReadConfig.progressBarBehavior
fun commitSliderValue(value: Float) {
val target = value.roundToInt().coerceIn(0, seekMax)
sliderDragging = false
sliderValue = target.toFloat()
val behavior = ReadConfig.progressBarBehavior
if (behavior == "page") {
previewPageIndex = target
if (progressBarBehavior == "page") {
onIntent(ReadBookIntent.SkipToPage(target))
} else {
onIntent(ReadBookIntent.SeekToChapter(target))
}
}
LaunchedEffect(state.seekProgress, seekMax) {
if (!sliderDragging) {
sliderValue = state.seekProgress.coerceIn(0, seekMax).toFloat()
fun updateSliderValue(value: Float) {
val coercedValue = value.coerceIn(0f, sliderMax)
sliderDragging = true
sliderValue = coercedValue
if (progressBarBehavior == "page") {
val target = coercedValue.roundToInt().coerceIn(0, seekMax)
if (target != previewPageIndex) {
previewPageIndex = target
onIntent(ReadBookIntent.SkipToPage(target))
}
}
}
LaunchedEffect(state.seekProgress, seekMax, progressBarBehavior) {
val progress = state.seekProgress.coerceIn(0, seekMax)
previewPageIndex = progress
if (progressBarBehavior == "page" || !sliderDragging) {
sliderValue = progress.toFloat()
}
}
@@ -1810,10 +1827,7 @@ private fun MenuBottomBar(
ReadMenuSlider(
value = sliderValue.coerceIn(0f, sliderMax),
onValueChange = { value ->
sliderDragging = true
sliderValue = value.coerceIn(0f, sliderMax)
},
onValueChange = ::updateSliderValue,
onValueChangeFinished = {
commitSliderValue(sliderValue)
},
@@ -2721,20 +2735,29 @@ private fun BrightnessBar(
var sliderValue by remember { mutableFloatStateOf(brightness.toFloat()) }
var sliderDragging by remember { mutableStateOf(false) }
LaunchedEffect(brightness) {
if (!sliderDragging) {
LaunchedEffect(brightness, brightnessAuto) {
if (brightnessAuto) {
sliderDragging = false
sliderValue = brightness.toFloat()
} else if (!sliderDragging) {
sliderValue = brightness.toFloat()
}
}
fun commitSliderValue(value: Float) {
if (brightnessAuto) return
val target = value.roundToInt().coerceIn(0, 100)
sliderDragging = false
sliderValue = target.toFloat()
if (brightnessAuto) return
onBrightnessChange(target)
}
fun toggleAuto() {
sliderDragging = false
sliderValue = brightness.toFloat()
onToggleAuto()
}
if (vertical) {
Column(
modifier = modifier
@@ -2744,7 +2767,7 @@ private fun BrightnessBar(
verticalArrangement = Arrangement.spacedBy(10.dp),
) {
ReadMenuGlassIconButton(
onClick = onToggleAuto,
onClick = ::toggleAuto,
icon = Icons.Filled.BrightnessAuto,
colors = colors,
backdrop = backdrop,
@@ -2787,7 +2810,7 @@ private fun BrightnessBar(
horizontalArrangement = Arrangement.spacedBy(8.dp),
) {
ReadMenuGlassIconButton(
onClick = onToggleAuto,
onClick = ::toggleAuto,
icon = Icons.Filled.BrightnessAuto,
colors = colors,
backdrop = backdrop,