Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why does ImmutableList cause recomposition in Jetpack Compose?

In this article, it says that if the argument type of a composable is ImmutableList, it is considered as stable, meaning that if the list didn't change, the composable won't be recomposed.

@Immutable
data class Contact(val name: String, val age: Int)


@Composable
fun ContactRow(contacts: ImmutableList<Contact>, modifier: Modifier = Modifier) {
  var selected by remember { mutableStateOf(false) }
  Row(modifier) {
    ContactDetails(contacts)
    Checkbox(selected, onCheckedChange = {
      selected = !selected
    })
  }
}

@Composable
fun ContactDetails(contacts: ImmutableList<Contact>) {
  Text(text = contacts[0].name)
}

Here, every time I select the checkbox, the ContactDetails composable is recomposed, even though I am using ImmutableList from KotlinX collections.

My compose version is also 1.2.0

My Compiler reports also mark this as unstable

like image 584
Muhammad Ahmed AbuTalib Avatar asked Jul 02 '26 15:07

Muhammad Ahmed AbuTalib


1 Answers

There has to be a small mistake on your side. Code presented here is valid, ContactDetails will be skipped, not recomposed. Compiler marks both ContactRow and ContactDetails as stable & skippable.

enter image description here

enter image description here

like image 108
Denis Rudenko Avatar answered Jul 05 '26 04:07

Denis Rudenko



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!