Вступить в клуб →
сложнаявопросJetpack Compose и состояние экрана

После поворота экрана приложение снова уходит на экран успеха

После успешной оплаты во ViewModel выставляется флаг в состоянии экрана:

data class PaymentUiState(
    val isLoading: Boolean = false,
    val navigateToSuccess: Boolean = false
)

Экран смотрит на флаг и выполняет переход. Тестировщик сообщает: если повернуть устройство на экране успеха и нажать «назад», приложение снова уходит на экран успеха.

Как правильно это чинить?

  • Сравнивать текущий маршрут навигации внутри ViewModel и не отправлять переход, если экран успеха уже открыт
  • Сохранять флаг перехода в переживающем поворот запоминании, чтобы после пересоздания экрана он точно не терялся
  • Добавить небольшую задержку перед переходом, чтобы поворот успел завершиться раньше навигации
  • Хранить одноразовые события отдельно от состояния и подтверждать обработку: сбрасывать флаг или слать события каналом

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела