dimsuz
05/12/2022, 11:24 AMButton
slot's content and printing "recomposing"?
MaterialTheme {
val handler = { _: TextLayoutResult -> }
MyButton(handler)
}
@Composable
fun MyButton(handler: (TextLayoutResult) -> Unit) {
val state by flowOf("two", "three").collectAsState("one")
Button(onClick = {}, enabled = state == "two") {
println("recomposing content")
Text(text = "Button", onTextLayout = handler)
}
}
If I remove "handler" parameter recomposition happens only once. Is there a way to somehow mark "handler" as stable?Albert Chang
05/12/2022, 11:31 AMremember { flowOf("two", "three") }.collectAsState("one")
?dimsuz
05/12/2022, 11:41 AMhfhbd
05/12/2022, 11:45 AMequal
. I think, setting a lambda variable inside a recomposition is not supported.dimsuz
05/12/2022, 11:50 AMhandler == hanlder
will be true
fun Application() {
val handler = { _: TextLayoutResult -> }
MaterialTheme {
val state by remember { flowOf("two", "three") }.collectAsState("one")
MyButton(state = state, handler = handler)
}
}
@Composable
fun MyButton(state: String, handler: (TextLayoutResult) -> Unit) {
Button(onClick = {}, enabled = state == "two") {
println("recomposing content")
Text(text = "Button", onTextLayout = handler)
}
}
This uses remember
and it keeps recomposing the slot even though handler doesn't change and slot uses only handler.
This keeps happening even if I move handler
to be a top-level file scoped variableAlbert Chang
05/12/2022, 11:55 AMequals()
the previous one.dimsuz
05/12/2022, 11:59 AM() -> Unit
lambda to some onClick
inner to the slot.agrosner
05/12/2022, 2:52 PM@Stable
? https://github.com/androidx/androidx/blob/androidx-main/compose/compiler/design/compiler-metrics.mddimsuz
05/12/2022, 3:14 PMagrosner
05/13/2022, 1:48 PMshikasd
05/14/2022, 2:50 PMremember { flowOf(...).collectAsState("one") }
Note that state is created inside remember in that case.