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

Jetpack Compose中Firebase认证失败显示Toast遇上下文问题求解

解决Firebase认证失败时Toast无法显示的LocalContext问题

问题核心在于Firebase的addOnCompleteListener异步回调脱离了Compose的Composition作用域,直接在回调内调用LocalContext.current会因找不到Compose上下文报错。以下是直接有效的解决方法:

  • 在Button所在的Composable函数内部、异步回调代码之外提前获取Context并保存,之后在回调里直接使用该变量:
// 在Button代码之前,Composable作用域内获取Context
val context = LocalContext.current

Button(
    onClick = {
        auth.signInWithEmailAndPassword(email, password)
            .addOnCompleteListener { task ->
                if (task.isSuccessful) {
                    navController.navigate(Screen.PreferenceScreen.route)
                } else {
                    Log.w(TAG, "createUserWithEmail:failure", task.exception)
                    Toast.makeText(
                        context, // 使用提前获取的Context
                        "认证失败",
                        Toast.LENGTH_SHORT
                    ).show()
                }
            }
    },
    modifier = Modifier
        .fillMaxWidth()
        .padding(8.dp),
    enabled = isPasswordValid && confirmPassword == password,
) {
    Text(text = "注册")
}

原理:LocalContext.current仅能在Composable的Composition作用域中访问,而Firebase异步回调执行时已脱离该作用域,提前保存Context变量即可绕过这个限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:10:18