После поворота экрана приложение снова уходит на экран успеха
После успешной оплаты во ViewModel выставляется флаг в состоянии экрана:
data class PaymentUiState(
val isLoading: Boolean = false,
val navigateToSuccess: Boolean = false
)
Экран смотрит на флаг и выполняет переход. Тестировщик сообщает: если повернуть устройство на экране успеха и нажать «назад», приложение снова уходит на экран успеха.
Как правильно это чинить?
- Сравнивать текущий маршрут навигации внутри ViewModel и не отправлять переход, если экран успеха уже открыт
- Сохранять флаг перехода в переживающем поворот запоминании, чтобы после пересоздания экрана он точно не терялся
- Добавить небольшую задержку перед переходом, чтобы поворот успел завершиться раньше навигации
- Хранить одноразовые события отдельно от состояния и подтверждать обработку: сбрасывать флаг или слать события каналом
