zsperske
06/22/2022, 5:23 PMif (viewModel.state.scrollToTop) {
LaunchedEffect(viewModel.state.scrollToTop) {
scrollState.animateScrollTo(0)
viewModel.updateScrollToTop(false)
}
}
Sean McQuillan [G]
06/22/2022, 5:27 PMSean McQuillan [G]
06/22/2022, 5:28 PMzsperske
06/22/2022, 5:29 PMzsperske
06/22/2022, 5:29 PMzsperske
06/23/2022, 7:11 PMSean McQuillan [G]
06/23/2022, 7:23 PMSean McQuillan [G]
06/23/2022, 7:23 PMSean McQuillan [G]
06/23/2022, 7:25 PMrememberScrollState
is really just doing all of this in composition using remember
, but there's no composition specific bits to a ScrollState
@Composable
fun rememberScrollState(initial: Int = 0): ScrollState {
return rememberSaveable(saver = ScrollState.Saver) {
ScrollState(initial = initial)
}
}
zsperske
06/23/2022, 7:29 PMSean McQuillan [G]
06/23/2022, 7:29 PMSean McQuillan [G]
06/23/2022, 7:31 PMzsperske
06/23/2022, 7:32 PMView
for my whole page that extends AbstractComposeView
• In the onSaveInstanceState
and restoreInstanceState
methods I’m trying to stuff the scroll position into a parcelable and then restore it
• I can save and fetch the value just fine, but when trying to restore it I’m properly setting the scroll position once, but then it gets written again to 0 for reasons I don’t understand yetSean McQuillan [G]
06/23/2022, 7:32 PMzsperske
06/23/2022, 7:36 PMSean McQuillan [G]
06/23/2022, 7:38 PMSean McQuillan [G]
06/23/2022, 7:39 PMSean McQuillan [G]
06/23/2022, 7:39 PMval Saver: Saver<ScrollState, *> = Saver(
save = { it.value },
restore = { ScrollState(it) }
)
zsperske
06/23/2022, 7:40 PMzsperske
06/23/2022, 7:40 PMSean McQuillan [G]
06/23/2022, 7:40 PMzsperske
06/23/2022, 8:41 PMval position = viewModel.state.scrollPosition
val scrollState = rememberScrollState(position)
However the initial position via remember is only set once and ignored when recomposing. So I tried to force a scroll via:
LaunchedEffect(viewModel.state.scrollPosition) {
scrollState.scrollTo(position)
}
This does scroll the view, however since the composable hasn’t laid out yet it tries to scroll to a position that’s off the screen so you end up only partway down.Sean McQuillan [G]
06/23/2022, 9:42 PMviewModel.state
?zsperske
06/23/2022, 10:15 PMval scrollState = viewModel.state.scrollState
Column(
modifier = Modifier
.verticalScroll(scrollState)
.padding(bottom = AffirmTheme.dimensions.screenVerticalSmallMargin)
)
However its the same issue where the view shifts down only a little bit despite being given a value like 1900zsperske
06/23/2022, 10:16 PMzsperske
06/23/2022, 10:33 PMSean McQuillan [G]
06/23/2022, 10:33 PMzsperske
06/23/2022, 10:34 PMSean McQuillan [G]
06/23/2022, 10:36 PMzsperske
06/23/2022, 10:37 PM