Compose 封装 - 点击防抖

一、概念

|-------------|-------------------------------------------------------------------------------|
| 简单场景(如登录按钮) | 使用标记,实现成本低。定义一个布尔状态 isLoading,业务代码开始时若为 true 则直接return,在成功后或finally中设为 false。 |
| 搜索框 | 延迟执行。 |
| 需立即反馈 | 一段时间内只执行一次。 |

二、基于时长

2.1 封装为Modifier

Kotlin 复制代码
/**
 * 双击防抖
 */
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。

Kotlin 复制代码
/**
 * 双击防抖(适用于自带点击回调的组件如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()
    }
}
相关推荐
晓梦林8 小时前
cp520靶场学习笔记
android·笔记·学习
有味道的男人11 小时前
Open Claw对接1688平台
android·rxjava
_李小白12 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
用户860225046747213 小时前
AI 分析头部APP系统优化框架
android
用户860225046747213 小时前
AI分析头部APP优化框架
android
2501_9160074716 小时前
iOS开发中抓取HTTPS请求的完整解决方法与步骤详解
android·网络协议·ios·小程序·https·uni-app·iphone
lvronglee18 小时前
【数字图传第四步】Android App查看图传视频
android·音视频
90后的晨仔18 小时前
Android 程序入口与核心组件详解
android
90后的晨仔18 小时前
Kotlin 简介与开发环境搭建
android
BU摆烂会噶19 小时前
【LangGraph】House_Agent 实战(四):预定流程 —— 中断与人工干预
android·人工智能·python·langchain