На экране одновременно спиннер и ошибка: как устроено состояние
Состояние экрана поиска описано так:
data class SearchState(
val isLoading: Boolean = false,
val items: List<Item> = emptyList(),
val error: String? = null,
val isEmpty: Boolean = false
)
QA приносит три бага подряд: спиннер поверх текста ошибки; надпись «ничего не найдено» вместе с непустым списком; пустой экран без спиннера и без ошибки после отмены запроса.
Какое решение устраняет причину, а не отдельные случаи?
- Добавить во ViewModel проверки, которые при каждом изменении сбрасывают лишние флаги, — это дешевле переделки состояния и не трогает вёрстку экрана
- Расставить приоритеты отображения во View: сначала ошибка, затем спиннер, затем список
- Описать экран одним значением из закрытого набора состояний (загрузка, содержимое, пусто, ошибка), чтобы невозможные комбинации нельзя было выразить
- Перерисовывать экран целиком на каждое изменение вместо частичного обновления отдельных вью
