如何在jetpack撰写中记住非主要类型的类的状态



如果我这样做,那么jetpack中的开发人员将撰写:

var model by remember{ mutableStateOf(false)}

它! !

但为什么我这样做:

var model by remember{ mutableStateOf(Register())}

Register是一个类:

class Register {
var correo: String=""
var password: String=""
var nombre: String=""
var apellido: String=""
var direccion: String=""
var telefono: String=""
var confirmacion: String=""
}

,但第二种方式是不绑定属性我怎么能做到呢?

要让Compose触发重组,你需要改变

的值
var model by remember{ mutableStateOf(Register())}

因为默认mutableStateOf使用SnapshotMutationPolicy检查两个实例是否相等

fun <T> mutableStateOf(
value: T,
policy: SnapshotMutationPolicy<T> = structuralEqualityPolicy()
): MutableState<T> = createSnapshotMutableState(value, policy)
fun <T> structuralEqualityPolicy(): SnapshotMutationPolicy<T> =
StructuralEqualityPolicy as SnapshotMutationPolicy<T>
private object StructuralEqualityPolicy : SnapshotMutationPolicy<Any?> {
override fun equivalent(a: Any?, b: Any?) = a == b
override fun toString() = "StructuralEqualityPolicy"
}

您可以通过创建一个新的SnapshotMutationPolicy或

设置新的Register实例到您的model。我认为最简单的方法是使用数据类然后用data类copy函数创建一个新实例,该函数创建一个新实例,允许您在保持其他属性不变的情况下更改其某些属性

data class Register (
var correo: String=""
var password: String=""
var nombre: String=""
var apellido: String=""
var direccion: String=""
var telefono: String=""
var confirmacion: String=""
)
var model by remember { mutableStateOf(Register()) }
model = model.copy(password = "new password")

最新更新