作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在我的可组合项中显示一个倒计时的计时器,但我不确定如何实现。
我正在考虑设置一分钟的延迟/超时并以这种方式触发重组,但我不确定这是否是正确的思考方式。
@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")
}
我的目标是让文本每分钟更新一次。我该怎么做?
最佳答案
将分钟数存储为状态。
还要确保清除 DisposableEffect
中的 postDelayed
回调以防止冲突延迟和内存泄漏。
我已将此逻辑移动到 minutesLeft
可组合函数中,以便可以重复使用。
@Composable
fun minutesLeft(until: Date): Int {
var value by remember { mutableStateOf(getMinutesLeft(until)) }
DisposableEffect(Unit) {
val handler = Handler(Looper.getMainLooper())
val runnable = {
value = getMinutesLeft(until)
}
handler.postDelayed(runnable, 60_000)
onDispose {
handler.removeCallbacks(runnable)
}
}
return value
}
private fun getMinutesLeft(until: Date): Int {
return ceil((until.time - Date().time) / 60_000.0).toInt()
}
@Composable
fun Countdown(completedAt: Date) {
val minutes = minutesLeft(until = completedAt)
Text(text = "$minutes minutes until completed")
}
关于android - 如何在 Jetpack Compose 中分分钟重构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67569208/
我是一名优秀的程序员,十分优秀!