Как показать тост, если авторизация не удалась, реактивный ранец, составить базу данных, если в противном случае вызовы @Composable могут происходить только из контекста функции @Composable

Похоже, что в 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")
                }   
}
3
0
77
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Просто объявите 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 функции при переполнении стека, лол

Dolev Dublon 04.12.2022 16:49

Другие вопросы по теме