gpt4 book ai didi

android - Jetpack 撰写 : MutableState not working as intended

转载 作者:行者123 更新时间:2023-12-05 00:13:01 32 4
gpt4 key购买 nike

在我们的 Android 应用程序中,我们希望将 Compose 引入一个简单的调试屏幕,我们可以在其中启用/禁用 SharedPreferences。我正在尝试使用 Compose 的界面 MutableState 让它运行。 - 但它并不像我认为的那样起作用。我的计划是暂时使用MutableState在 SharedPreferences 中设置一个 bool 值(在稍后迁移到 DataStore 之前)。
这是我的想法:

private class MyOwnState(startWith: Boolean) : MutableState<Boolean> {
override var value: Boolean = startWith
override fun component1(): Boolean = value
override fun component2(): (Boolean) -> Unit = { value = it }
}

// then, in composable:
var value by remember { MyOwnState(false) }
当然在现实生活中我会覆盖 value 的 getter+setter - 但是这个例子就足够了,因为它不起作用。状态更改不会传播,UI 也不会更新。
为了说明这一点,我将代码 fragment by remember { mutableStateOf(false) } 放在一起和 by remember { MyOwnState(false) } .第一个有效(开关已更新),第二个无效。
完整代码:
@Composable
fun SomeStateExamples() {
Column {
SwitchWorks()
SwitchDoesNotWork()
}
}

@Composable
fun SwitchWorks() {
var value by remember { mutableStateOf(false) }
Switch(checked = value, onCheckedChange = { value = it })
}

@Composable
fun SwitchDoesNotWork() {
var value by remember { MyOwnState(false) }
Switch(checked = value, onCheckedChange = { value = it })
}


private class MyOwnState(startWith: Boolean) : MutableState<Boolean> {
override var value: Boolean = startWith
override fun component1(): Boolean = value
override fun component2(): (Boolean) -> Unit = { value = it }
}
第一个开关是可切换的,第二个不是:
first switch works, second one does not
我错过了什么? MutableState接口(interface)非常简单且稳定 - 我没有找到需要调用的任何额外方法(又名 invalidate、notifyListeners,...)。
谢谢您的帮助! 🙏

最佳答案

添加到 Johan 的答案中,您似乎还需要实现 StateObject获取值并更新 thd 快照系统。通过查看 SnapshotMutableStateImpl

override var value: T
get() = next.readable(this).value
set(value) = next.withCurrent {
if (!policy.equivalent(it.value, value)) {
next.overwritable(this, it) { this.value = value }
}
}

private var next: StateStateRecord<T> = StateStateRecord(value)

override val firstStateRecord: StateRecord
get() = next
您将看到使用 StateObject让您与 StateRecord 合作s 存储可更新值的位置,读取并更新它。

关于android - Jetpack 撰写 : MutableState<Boolean> not working as intended,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70831350/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com