Working on Compose, I'm trying to know when a sub-composable has been rendered to start my LaunchEffect
Here's a little snippet of what I'm trying to achieve :
fun MyCompo(
screen: @Composable (Modifier) -> Unit,
) {
val fr = remember { FocusRequester() }
screen(Modifier.focusRequester(fr))
LaunchEffect(Unit) {
fr.requestFocus()
}
}
My LaunchEffect
is crashing because it's launched before screen()
had time to render.
Any idea how to achieve this ? Thanks
How about adding a callback to your screen Composable and invoking it from LaunchedEffect from screen implementation? Does this work?
@Composable
fun MyComposable(
screen: @Composable (Modifier, ()->Unit) -> Unit,
) {
val fr = remember { FocusRequester() }
screen(Modifier.focusRequester(fr)) {
println("Child Composable")
}
LaunchedEffect(Unit) {
println("Parent Composable")
fr.requestFocus()
}
}
And invoking it
MyComposable { modifier, onComposed->
Box(modifier = modifier
.size(200.dp)
.border(3.dp, Color.Red)) {
LaunchedEffect(key1 = Unit){
onComposed()
}
}
}