Похоже, что в stackoverflow есть бесконечное количество объяснений этой ошибки, ни одно из которых не решает мою проблему.
Я хочу показать тост, если аутентификация не удалась
Я использую аутентификацию firebase, но ошибка связана с контекстом местоположения
как я могу обойти это ограничение?
исходный код кнопки
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")
}
}
Просто объявите context
за пределами кнопки и используйте его в Toast следующим образом.
@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)
}
спасибо, я просто не нашел правильных вызовов Composable, которые могут происходить только из контекста сообщения Composable функции при переполнении стека, лол