@NeNeDoffy

Как отложить выполнение функции до результата от сервера?

Приветствую, у меня возник вопрос при создании логики авто-логирования пользователя в приложении с помощью запроса на авторизацию в Firebase auth. Не получается скомпоновать логику запроса в бд и вызов composable графа, поскольку вызов из firebase - асинхронная операция и вызов графа срабатывает до инициализации startDestination

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            AppTheme {
                val context = LocalContext.current
                val auth: FirebaseAuth = Firebase.auth

                // Сохраненные ранее данные для входа
                val email = UserSharedPreferences.getEmail(context) ?: " "
                val password = UserSharedPreferences.getPassword(context) ?: " "

                // Граф перехода в зависимости от результата запроса
                var startDestination: String? = null

                // Запрос к Firebase auth
                auth.signInWithEmailAndPassword(email, password)
                    .addOnCompleteListener { task ->
                        startDestination = if (task.isSuccessful) {
                            UserSharedPreferences.saveCredentials(
                                context = context,
                                email = email,
                                password = password
                            )
                            Graph.HOME // Главное меню
                        } else {
                            Graph.AUTHENTICATION // Окно авторизации
                        }
                    }

                // Вызов Composable граф
                RootNavGraph(
                    navHostController = rememberNavController(),
                    startDestination = startDestination ?: Graph.AUTHENTICATION
                )
            }
        }
    }


Сам вызов графа писать в запрос к firebase auth нельзя т.к. отсутствует composable контекст, и на корутины код тоже жалуется. Может возникала у кого-то подобная ситуация? Был бы очень благодарен хоть за какую-то помощь
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
Jacen11
@Jacen11
Может возникала у кого-то подобная ситуация?
естественно

я даже больше скажу, нельзя делать запросы или тяжелую логику в главном потоке. В этом и есть ответ, нужно все делать асинхронно, для этого есть rxJava, корутины, можно что то низкоуровневое использовать

когда отработал запрос, слушатель получает ответ и делается какая то логика

в активити кстати логику тоже нельзя прописывать. Изучайте чистую архитектуру, mvvm или mvi и корутины
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@LukyanovPA
Android Developer
Зачем хранить почту и пароль в префах? Это не безопасно!
Запрашивайте в Firebase currentUser и если он null, то пользователь не залогинен, а если нет, то залогинен
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы