如果 Stable 类型的公共属性发生变化,如何通知 Composition?

Pon*_*rai 5 android android-jetpack-compose

如 Jetpack compose 文档中所述,稳定类型必须遵守以下合同。

  1. 对于相同的两个实例,两个实例的 equals 结果将永远相同。
  2. 如果该类型的公共属性发生变化,Composition 将会收到通知。
  3. 所有公共财产类型也都很稳定。

第一份和第三份合同很简单。如何才能满足第二点呢?

例如,我有一个稳定的类型,称为User

data class User(val username: String, var email: String)
Run Code Online (Sandbox Code Playgroud)

我在应用程序运行过程中更改了电子邮件,如何通知作文?

Phi*_*hov -2

Compose 有一种特殊State类型,可以让您在需要重组时发出通知。这是启动重组的最常见方法。

该类data是一个很好的工具,可以为您提供copy开箱即用的所有字段,但您应该避免使用var并仅val用于您的字段以避免错误。

因此,更新字段的基本示例如下所示:

var state by remember { mutableStateOf(User(username = "", email = "")) }
TextField(
    value = state.username,
    onValueChange = {
        state = state.copy(username = it)
    }
)
Run Code Online (Sandbox Code Playgroud)

您可以以同样的方式使用Flow/ ,因为它们可以用/收集。LiveDataStatecollectAsStateobserveAsState

更多信息可以在 Compose文档中找到,包括这个解释基本原理的YouTube 视频。