FlowFan
04/08/2025, 3:34 PMText1
recomposes, the Image
also recomposes, but Text2
doesn't. How can I prevent the Image
from recomposing when Text1
changes?
var num by remember { mutableStateOf(0) }
var text by remember { mutableStateOf("text") }
LaunchedEffect(Unit) {
while (isActive) {
delay(1000)
num++
}
}
FirstScreen(
number = num,
text = text,
onImageClick = {}
)
@Composable
fun FirstScreen(
number: Int,
text: String,
onImageClick: () -> Unit
) {
Column {
Text("$number")
Image(
painter = painterResource(resource = Res.drawable.compose_multiplatform),
contentDescription = null,
modifier = Modifier.clickable(onClick = onImageClick)
)
Text(text)
}
}
Besides moving the Image
to a separate Composable, are there other ways to optimize this? What’s considered the best practice?Zach Klippenstein (he/him) [MOD]
04/08/2025, 4:43 PMFlowFan
04/09/2025, 1:45 AMImage
itself hasn’t changed.Zach Klippenstein (he/him) [MOD]
04/09/2025, 1:47 AMFlowFan
04/09/2025, 2:07 AMImage
recomposes helps fix real performance issues when they appear.FlowFan
04/09/2025, 11:56 AMModifier.clickable
, clickable with InteractionSource / Indication parameters can optimize this. https://issuetracker.google.com/issues/241154852#comment10marcinmoskala
04/17/2025, 1:32 PMvar num by remember { mutableStateOf(0) }
var text by remember { mutableStateOf("text") }
LaunchedEffect(Unit) {
while (isActive) {
delay(1000)
num++
}
}
FirstScreen(
number = { num },
text = text,
onImageClick = {}
)
@Composable
fun FirstScreen(
number: () -> Int,
text: String,
onImageClick: () -> Unit
) {
Column {
NumberText(number)
Image(
painter = painterResource(resource = Res.drawable.compose_multiplatform),
contentDescription = null,
modifier = Modifier.clickable(onClick = onImageClick)
)
Text(text)
}
}
FlowFan
04/18/2025, 1:51 AM@Composable
fun FirstScreen(
number: Int,
text: String,
onImageClick: () -> Unit
) {
Column {
Text("$number")
Image(
painter = painterResource(resource = Res.drawable.compose_multiplatform),
contentDescription = null,
modifier = Modifier.clickable(
interactionSource = remember { MutableInteractionSource() },
indication = null,
onClick = onImageClick
)
)
Text(text)
}
}