use*_*297 7 android kotlin android-jetpack-compose
我是 Jetpack Compose 的新手,我刚刚开始通过创建计时器应用程序来尝试它,但遇到了问题。
在我的应用程序中,每个任务都有不同的持续时间,其中一项任务完成(时间已过)后,下一项任务应该开始。我的问题是我的应用程序仅适用于第一个任务。第一个任务完成后,应显示第二个任务,任务标题和描述会更改,但计时器的倒计时值仍为 0,不会从之前的状态更新。
onFinished调用视图模型的方法之一,该方法将获取应显示的下一个任务并将其加载到实时数据中。我通过以下方式观察此实时数据的变化:
val 任务 = viewModel.currentTask.observeAsState().value
此任务有一个持续时间字段,我将其传递给此Timer可组合项,但当更新此任务时(因为实时数据具有新值),Timer 可组合项无法识别这些更改。它不会重新开始倒计时,而是保持 0。
我不确定我是否正确理解和使用 MutableState 概念,所以有人可以帮助我吗?
@Composable
fun Timer(duration: Long, onFinished: () -> Unit) {
var currentTimerValue by remember { mutableStateOf(duration) }
LaunchedEffect(key1 = currentTimerValue) {
if (currentTimerValue > 0) {
delay(1000L)
currentTimerValue--
} else {
onFinished.invoke()
}
}
Text(text = currentTimerValue.toString(), fontSize = 24.sp, color = Color.White)
}
Run Code Online (Sandbox Code Playgroud)
Thr*_*ian 10
问题就在这里
var currentTimerValue by remember { mutableStateOf(duration) }
Run Code Online (Sandbox Code Playgroud)
计时器可组合进入组合后,记忆中的块将被初始化,并且除非您使用新密钥重置它,否则它不会更改。
您可以将其更新为
var currentTimerValue by remember(duration) { mutableStateOf(duration) }
Run Code Online (Sandbox Code Playgroud)
每次计时器功能的持续时间参数发生变化时,都会重置为持续时间
归档时间: |
|
查看次数: |
2127 次 |
最近记录: |