为什么 ImmutableList 会导致 Jetpack Compose 中的重组?

Muh*_*lib 6 android kotlin android-jetpack-compose

这篇文章中,它说如果可组合项的参数类型是ImmutableList,则它被认为是稳定的,这意味着如果列表没有更改,则可组合项将不会被重组。

@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)
}
Run Code Online (Sandbox Code Playgroud)

在这里,每次我选择该复选框时,ContactDetails即使我使用的ImmutableList是 KotlinX 集合中的内容,可组合项也会重新组合。

我的compose版本也是1.2.0

我的编译器报告也将其标记为不稳定

Den*_*nko 1

你这边一定有一个小错误。此处提供的代码有效,ContactDetails 将被跳过,不会重新组合。编译器将 ContactRow 和 ContactDetails 标记为稳定且可跳过。

在此输入图像描述

在此输入图像描述