一、概念
| 简单场景(如登录按钮) | 使用标记,实现成本低。定义一个布尔状态 isLoading,业务代码开始时若为 true 则直接return,在成功后或finally中设为 false。 |
| 搜索框 | 延迟执行。 |
| 需立即反馈 | 一段时间内只执行一次。 |
二、基于时长
2.1 封装为Modifier
/**
* 双击防抖
*/
fun Modifier.clickableDebounce(
duration: Long = 5000L,
onClick: () -> Unit
) = composed {
var lastClick by remember { mutableLongStateOf(0L) }
this.then(
Modifier.clickable(
onClick = {
val currentTime = System.currentTimeMillis()
if (currentTime - lastClick >= duration) {
onClick()
lastClick = currentTime
}
},
interactionSource = remember { MutableInteractionSource() },
indication = null
)
)
}
2.2 封装为函数
适用于自带点击回调的组件如Button。
/**
* 双击防抖(适用于自带点击回调的组件如Button)
*/
inline fun onClickDebounce (
lastClickTime: Long,
onLastClickTimeChange: (Long) -> Unit,
duration: Long = 5000L,
onClick: () -> Unit,
) {
val currentTime = System.currentTimeMillis()
if (currentTime - lastClickTime >= duration) {
onLastClickTimeChange(currentTime)
onClick()
}
}
3354

被折叠的 条评论
为什么被折叠?



