我想显示一个计时器倒计时在我的composable,但我不知道如何实现这一点。
我想设置一分钟的延迟/超时,然后以这种方式触发重组,但我不确定这是否是正确的思考方式。
@Composable
fun Countdown(completedAt: Date) {
val minutesLeft = ceil((completedAt.time - Date().time) / 60_000.0).toInt()
Handler(Looper.getMainLooper()).postDelayed({
// TODO: Recompose
}, 60_000)
Text(text = "$minutesLeft minutes until completed")
}
我的目标是让文本每分钟更新一次新的时间。我如何才能做到这一点?
5条答案
按热度按时间7kjnsjlb1#
将分钟数存储为状态。
另外,请确保清理
DisposableEffect
中的postDelayed
回调,以防止冲突延迟和内存泄漏。我已经将这个逻辑移到了一个
minutesLeft
可组合函数中,这样它就可以被重用。用法
ttcibm8c2#
您可以将
ViewModel
与CountDownTimer
类一起使用。类似于:
其中:
kgsdhlau3#
i2byvkas4#
这些代码可能会给予你一个想法,以实现这一目标:
xkftehaa5#
如果不是每一毫秒都比我的小TickTack重要,那么一个组合物就可以完成这项工作: