Stylianos Gakis
03/23/2023, 11:19 AMColumn {
Stuff()
AnimatedVisibility(shouldShow) {
Column {
Text()
Spacer(Modifier.width(8.dp))
Icon()
}
}
}
But when doing this with CompositionLocalProvider like this:
Column {
Stuff()
CompositionLocalProvider(LocalContentColor provides LocalContentColor.current.copy(alpha = ContentAlpha.medium)) {
Text()
Spacer(Modifier.width(8.dp))
Icon()
}
}
You don’t need to do this, it just works.
Why is this the case? CompositionLocalProvider
isn’t even inline or something like that, nor is it an extension on ColumnScope for it to work due to that. So how does it work? What am I missing here?Zoltan Demant
03/23/2023, 2:43 PM@Composable
@OptIn(InternalComposeApi::class)
fun CompositionLocalProvider(vararg values: ProvidedValue<*>, content: @Composable () -> Unit) {
currentComposer.startProviders(values)
content()
currentComposer.endProviders()
}
@ExperimentalAnimationApi
@Composable
private inline fun AnimatedEnterExitImpl(
transition: Transition<EnterExitState>,
modifier: Modifier,
enter: EnterTransition,
exit: ExitTransition,
content: @Composable AnimatedVisibilityScope.() -> Unit
) {
if (transition.currentState == EnterExitState.Visible ||
transition.targetState == EnterExitState.Visible
) {
val scope = remember(transition) { AnimatedVisibilityScopeImpl(transition) }
Layout(
content = { scope.content() },
modifier = modifier.then(transition.createModifier(enter, exit, "Built-in")),
measurePolicy = remember { AnimatedEnterExitMeasurePolicy(scope) }
)
}
}
Loney Chou
03/23/2023, 5:20 PM