Hi everyone, does anyone experiencing recompositio...
# compose
d
Hi everyone, does anyone experiencing recomposition issue when using extension scope? If the composable had scope like this
Copy code
fun RowScope.Item() {}
The recomposition doesn't triggered (tested by adding a breakpoint and console log) But if I remove the extension to this
Copy code
fun Item() {}
It works Sample code in thread
Works
Copy code
@Composable
internal fun Test(compose: @Composable () -> Unit, xml: @Composable () -> Unit) {
    var isFirstItemSelected by remember { mutableStateOf(true) }

    Column {
        Row(Modifier.fillMaxWidth()) {
            Item(
                isSelected = isFirstItemSelected,
            ) { isFirstItemSelected = true }
            Item(
                isSelected = !isFirstItemSelected
            ) { isFirstItemSelected = false }
        }
    }
}

@Composable
fun Item(
    isSelected: Boolean = false,
    modifier: Modifier = Modifier,
    onClick: () -> Unit
) {
    Surface(
        modifier
            .selectable(
                selected = isSelected,
                onClick = onClick
            )
            .defaultMinSize(minWidth = 48.dp, minHeight = 48.dp)
    ) {
        Column {
            Text("Item", color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onBackground)
        }
    }
}
Broken
Copy code
@Composable
internal fun Test(compose: @Composable () -> Unit, xml: @Composable () -> Unit) {
    var isFirstItemSelected by remember { mutableStateOf(true) }

    Column {
        Row(Modifier.fillMaxWidth()) {
            Item(
                isSelected = isFirstItemSelected,
            ) { isFirstItemSelected = true }
            Item(
                isSelected = !isFirstItemSelected
            ) { isFirstItemSelected = false }
        }
    }
}

@Composable
fun RowScope,Item(
    isSelected: Boolean = false,
    modifier: Modifier = Modifier,
    onClick: () -> Unit
) {
    Surface(
        modifier
            .selectable(
                selected = isSelected,
                onClick = onClick
            )
            .defaultMinSize(minWidth = 48.dp, minHeight = 48.dp)
    ) {
        Column {
            Text("Item", color = if (isSelected) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.onBackground)
        }
    }
}
Notice the blue color doesnt changed in second video unlike the first one
Tested in: Kotlin: 1.7.21 & 1.7.20 Compose: 1.4.0-alpha02, 1.3.2
a
Could you try with the latest
1.4.0-beta01
release?
d
there's no 1.4.0 beta01 in my gradle Could not find androidx.compose.compilercompiler1.4.0-beta01.
a
Ah sorry I was mistaken,
1.4.0-beta01
for the non-compiler versions,
1.4.1
for the compiler version
I believe this is https://issuetracker.google.com/issues/254918865 which was a compiler issue that should be fixed with compiler
1.4.1
.
d
ahh i see, i tried to find similar issue in issue tracker but can't found it. Thanks for the suggestion, will checkout later