eygraber
03/14/2023, 2:33 AMBoolean
literal is being passed in from. Anyone have any idea why this is happening? Code in 🧵TopAppBar
is scrolled, Scaffold's
content is recomposed (which makes sense since innerPadding
is changing). I would expect MyContent
to be skipped (since it takes a stable lambda and a parameter that is set to a Boolean
literal), but it is called on every recompose.
However, if I hardcode MyContent's
isVisible = true
instead of isVisible = isVisible
then it does get skipped.
@Composable
fun Test() {
MyContentWrapper(
content = {},
isVisible = true
)
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun MyContentWrapper(
content: @Composable () -> Unit,
isVisible: Boolean = true
) {
Scaffold(
topBar = {
TopAppBar(
title = { Text(text = "TopAppBar") },
scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
)
}
) { innerPadding ->
Box(
modifier = Modifier.padding(innerPadding)
) {
MyContent(
content = content,
isVisible = isVisible
)
}
}
}
@Composable
private fun MyContent(
content: @Composable () -> Unit,
isVisible: Boolean
) {
Log.e("TEST", "RECOMPOSE")
if(isVisible) {
content()
}
}
Ben Trengrove [G]
03/14/2023, 2:45 AMeygraber
03/14/2023, 2:49 AMBen Trengrove [G]
03/14/2023, 2:50 AMeygraber
03/14/2023, 2:59 AMBoolean
in an Immutable
data class even outside the scope of Scaffold
then it doesn't recompose.Ben Trengrove [G]
03/14/2023, 3:10 AMeygraber
03/14/2023, 3:15 AM