You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin Jetpack挂起函数中整合Snackbar按钮响应

解决方案

1. 修改挂起函数,内部整合统一处理逻辑

将原本返回SnackbarResult的函数改为直接在内部处理ActionPerformed事件,无需外部再判断结果:

suspend fun snackBar(
    snackbarHostState: SnackbarHostState, 
    context: Context,
    buttonText: Int = settings,
    snackbarText: Int = permission_access
) {
    val result = snackbarHostState.showSnackbar(
        context.resources.getString(snackbarText),
        context.resources.getString(buttonText),
        duration = SnackbarDuration.Short
    )

    // 统一处理按钮点击逻辑
    if (result == SnackbarResult.ActionPerformed) {
        // 安全转换Context为ComponentActivity,避免类型转换异常
        (context as? ComponentActivity)?.let { activity ->
            activity.appSettings().apply { activity.startActivity(this) }
        }
    }
}

2. 简化调用代码

修改后的函数无需外部再用when语句判断结果,直接调用即可:

val contextSnackBar = LocalContext.current
snackBarScope.launch {
    snackBar(context = contextSnackBar, snackbarHostState = snackbarHostState)
}

可选:保留自定义逻辑的灵活性

如果需要在统一逻辑之外支持额外的自定义操作,可以添加可选的lambda参数:

suspend fun snackBar(
    snackbarHostState: SnackbarHostState, 
    context: Context,
    buttonText: Int = settings,
    snackbarText: Int = permission_access,
    customAction: (() -> Unit)? = null
) {
    val result = snackbarHostState.showSnackbar(
        context.resources.getString(snackbarText),
        context.resources.getString(buttonText),
        duration = SnackbarDuration.Short
    )

    if (result == SnackbarResult.ActionPerformed) {
        // 执行统一逻辑
        (context as? ComponentActivity)?.let { activity ->
            activity.appSettings().apply { activity.startActivity(this) }
        }
        // 执行传入的自定义逻辑(可选)
        customAction?.invoke()
    }
}

调用时可按需传入自定义操作:

snackBarScope.launch {
    snackBar(
        context = LocalContext.current, 
        snackbarHostState = snackbarHostState,
        customAction = { /* 这里添加额外的自定义操作 */ }
    )
}

内容的提问来源于stack exchange,提问作者Slava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 03:48:30