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 新权限申请模型(Activity Result API)
android
阿拉斯攀登1 小时前
【RK3576 安卓 JNI/NDK 系列 04】JNI 核心语法(下):字符串、数组与对象操作
android·驱动开发·rk3568·瑞芯微·rk安卓驱动·jni字符串操作
2501_915909061 小时前
不用越狱就看不到 iOS App 内部文件?使用 Keymob 查看和导出应用数据目录
android·ios·小程序·https·uni-app·iphone·webview
llxxyy卢2 小时前
web部分中等题目
android·前端
轩情吖2 小时前
MySQL之事务管理
android·后端·mysql·adb·事务·隔离性·原子性
万物得其道者成2 小时前
uni-app Android 离线打包:多环境(prod/dev)配置
android·opencv·uni-app
符哥20082 小时前
Firebase 官方提供的Quick Start-Android 库的功能集讲解
android
koeda3 小时前
android17系统兼容
android·安卓
进击的cc3 小时前
面试官:Handler 没消息时为啥不卡死?带你从源码到底层内核彻底整明白!
android·面试
Yang-Never3 小时前
OpenGL ES ->YUV图像基础知识
android·java·开发语言·kotlin·android studio