From 3c7273968885b7c657326f98c3058e17b7e0577f Mon Sep 17 00:00:00 2001 From: Tolriq Date: Wed, 26 Jun 2024 08:52:12 +0200 Subject: [PATCH 1/2] Properly update the scaffoldState when the scrollstate changes. --- .../compose/layout/ScreenScaffold.kt | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt b/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt index 89d32f92a2..cf7507c45e 100644 --- a/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt +++ b/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt @@ -25,6 +25,7 @@ import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.lazy.LazyListState import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.key import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.wear.compose.foundation.ExperimentalWearFoundationApi @@ -56,17 +57,20 @@ fun ScreenScaffold( val key = remember { Any() } - DisposableEffect(key) { - onDispose { - scaffoldState.removeScreen(key) + // We need to update the scaffoldState with the proper scrollState + key(scrollState) { + DisposableEffect(key) { + onDispose { + scaffoldState.removeScreen(key) + } } - } - OnFocusChange { focused -> - if (focused) { - scaffoldState.addScreen(key, timeText, scrollState) - } else { - scaffoldState.removeScreen(key) + OnFocusChange { focused -> + if (focused) { + scaffoldState.addScreen(key, timeText, scrollState) + } else { + scaffoldState.removeScreen(key) + } } } From ae7df708674393c6cdf5ea0b4fda6e8b34934c47 Mon Sep 17 00:00:00 2001 From: Tolriq Date: Wed, 26 Jun 2024 09:26:31 +0200 Subject: [PATCH 2/2] Ensure that the position indicator is also properly updated even with Kotlin 2.0 --- .../compose/layout/ScreenScaffold.kt | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt b/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt index cf7507c45e..27e77f7826 100644 --- a/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt +++ b/compose-layout/src/main/java/com/google/android/horologist/compose/layout/ScreenScaffold.kt @@ -77,17 +77,19 @@ fun ScreenScaffold( Scaffold( modifier = modifier, timeText = timeText, - positionIndicator = { - if (positionIndicator != null) { - positionIndicator() - } else if (scrollState is ScalingLazyColumnState) { - PositionIndicator(scalingLazyListState = scrollState.state) - } else if (scrollState is ScalingLazyListState) { - PositionIndicator(scalingLazyListState = scrollState) - } else if (scrollState is LazyListState) { - PositionIndicator(scrollState) - } else if (scrollState is ScrollState) { - PositionIndicator(scrollState) + positionIndicator = remember(scrollState, positionIndicator) { + { + if (positionIndicator != null) { + positionIndicator() + } else if (scrollState is ScalingLazyColumnState) { + PositionIndicator(scalingLazyListState = scrollState.state) + } else if (scrollState is ScalingLazyListState) { + PositionIndicator(scalingLazyListState = scrollState) + } else if (scrollState is LazyListState) { + PositionIndicator(scrollState) + } else if (scrollState is ScrollState) { + PositionIndicator(scrollState) + } } }, content = { Box { content() } },