zhuinden
03/08/2021, 9:38 AMzhuinden
03/08/2021, 9:42 AMLayout(
content = {
allKeys.fastForEach { key ->
key(key) {
saveableStateHolder.SaveableStateProvider(key = key) {
if (key == topNewKey || (isAnimating && key == initialNewKey)) {
Box(
modifier = when {
!isAnimating || initialization -> modifier
else -> when {
key == topNewKey -> newTransition.animateComposable(modifier, stateChange, fullWidth, fullHeight, animationProgress)
else -> previousTransition.animateComposable(modifier, stateChange, fullWidth, fullHeight, animationProgress)
}
}
) {
key.RenderComposable(modifier)
}
}
}
}
}
},
measurePolicy = measurePolicy,
)
zhuinden
03/08/2021, 9:43 AMSaveableStateProvider
should store stuff in the "local saved state registry" which as I do not supply a custom one, should be the Activityzhuinden
03/08/2021, 9:43 AMzhuinden
03/08/2021, 10:06 AMrememberSaveable
work, although that sounds not idealzhuinden
03/08/2021, 11:54 AMAndrey Kulikov
03/08/2021, 11:57 AM@Immutable
@Parcelize
class SecondKey: ComposeKey() {
@Composable
override fun ScreenComposable(modifier: Modifier) {
SecondScreen(modifier)
}
}
is it how you define your keys?zhuinden
03/08/2021, 12:25 PMzhuinden
03/08/2021, 12:25 PMzhuinden
03/08/2021, 12:25 PM@Immutable
@Parcelize
data class DogListKey(private val noArgPlaceholder: String = "") : ComposeKey() {
@Suppress("RemoveExplicitTypeArguments")
override fun bindServices(serviceBinder: ServiceBinder) {
super.bindServices(serviceBinder)
with(serviceBinder) {
add(DogListViewModel(lookup<DogDataSource>()))
}
}
@Composable
override fun ScreenComposable(modifier: Modifier) {
val viewModel = rememberService<DogListViewModel>()
val dogs = viewModel.dogList.subscribeAsState(OptionalWrapper.absent())
DogListScreen(dogs.value.value)
}
}
Andrey Kulikov
03/08/2021, 12:35 PMzhuinden
03/08/2021, 12:41 PMzhuinden
03/08/2021, 12:41 PMzhuinden
03/08/2021, 12:42 PMzhuinden
03/08/2021, 12:42 PMzhuinden
03/08/2021, 12:48 PMAndrey Kulikov
03/08/2021, 2:41 PMAndrey Kulikov
03/08/2021, 2:41 PMAndrey Kulikov
03/08/2021, 2:42 PMif (key == topNewKey || (isAnimating && key == initialNewKey))
and only then saveableStateHolder.SaveableStateProvider(key = key)
Andrey Kulikov
03/08/2021, 2:43 PMzhuinden
03/08/2021, 4:01 PMAndrey Kulikov
03/08/2021, 4:11 PMzhuinden
03/08/2021, 5:09 PM