kotlin 如何显示吐司if auth failed jetpack compose firebase if else @Composable调用只能从@Composable函数的上下文中发生[duplicate]

dzhpxtsq  于 2022-12-13  发布在  Kotlin
关注(0)|答案(1)|浏览(106)

此问题在此处已有答案

@可组合调用只能从@可组合函数的上下文中发生(4个答案)
8天前关闭。
对于stackoverflow上的这个错误,似乎有无数种解释,但没有一种能解决我的问题。
如果身份验证失败,我希望显示吐司
我使用的是firebase身份验证,但位置上下文x1c 0d1x出错
我怎样才能通过这个限制呢?
按钮的源代码

Button(
                    onClick = {
                        auth.signInWithEmailAndPassword(email, password)
                            .addOnCompleteListener { task ->
                                if (task.isSuccessful) {
                                    navController.navigate(Screen.PreferenceScreen.route)
                                } else {
                                    // If sign in fails, display a message to the user.
                                    Log.w(TAG, "createUserWithEmail:failure", task.exception)
                                    Toast.makeText(
                                        LocalContext.current,
                                        "Authentication failed.",
                                        Toast.LENGTH_SHORT
                                    ).show()

                                }
                            }

                    },
                    modifier = Modifier
                        .fillMaxWidth()
                        .padding(8.dp),
                    enabled = isPasswordValid && confirmPassword == password,
                ) {
                    Text(text = "Register")
                }   
}
bzzcjhmw

bzzcjhmw1#

只需在Button外部声明context,然后在吐司中使用它,如下所示。

@Composable
fun MyButtonWithToast() {

    val context = LocalContext.current
  

    Button(
        onClick = {
            Toast.makeText(
                context,
                "Authentication failed.",
                Toast.LENGTH_SHORT
            ).show()
        }
    ) {
        Text(text = "Register")
    }
}

或者如果您有一个可组合的结构,只需在那里声明它,并将它传递到该按钮所在的可组合结构中

@Composable
fun SomeParentComposable() {

    val context = LocalContext.current
    
    MyButtonWithToast(context = context)
}

相关问题