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()
    }
}
相关推荐
私人珍藏库1 小时前
【Android】BotHub-多模型AI机器人聚合库-内置免费模型
android·人工智能·智能手机·app·工具·多功能
普马萨特1 小时前
Wi-Fi 扫描频率限制与 Android 演进全解析
android
张拭心2 小时前
Android 17 新特性:后台音频交互限制加强
android·前端
张拭心2 小时前
Android 17 新特性:ProfilingManager 新触发器
android·前端
张拭心2 小时前
Android 17 新特性:MessageQueue 无锁实现
android·前端
brycegao2 小时前
如何搭建标准化 Git 工具流,保障 Android 团队代码质量
android·ci/cd
AI科技星2 小时前
数术江湖·全卷合集 - 硬核江湖・数理史诗
android·人工智能·架构·概率论·学习方法
五月君_2 小时前
安卓也支持了!微信链接 Claude Code 保姆级教程
android·微信
柚鸥ASO优化3 小时前
一篇讲透安卓ASO!开发者千万别只盯着iOS了
android·ios·aso优化
木易 士心3 小时前
compileSdkVersion、minSdkVersion 和 targetSdkVersion —— Android 三个核心的 SDK 版本配置
android