Android compose 组件防止重复点击

52 阅读1分钟
fun Modifier.onClick(
    enabled: Boolean = true,
    onClickLabel: String? = null,
    role: Role? = null,
    limitTime: Long = 500L,
    onClick: () -> Unit
) = composed {
    val lastClickTime = remember { mutableLongStateOf(0L) }
    this.clickable(
        enabled = enabled,
        onClickLabel = onClickLabel,
        onClick = {
            val currentTime = System.currentTimeMillis()
            if (currentTime - lastClickTime.longValue >= limitTime) {
                lastClickTime.longValue = currentTime
                onClick()
            }
        },
        role = role,
        indication = null,
        interactionSource = remember { MutableInteractionSource() }
    )
}
/**
 * 防止重复点击,比如用在Button时直接传入onClick函数
 */
@Composable
inline fun composeClick(
    limitTime: Long = 500L,
    crossinline onClick: () -> Unit
): () -> Unit {
    val lastClickTime = remember { mutableLongStateOf(0L) }
    return {
        val currentTime = System.currentTimeMillis()
        if (currentTime - lastClickTime.longValue >= limitTime) {
            lastClickTime.longValue = currentTime
            onClick()
        }
    }
}