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

На экране одновременно спиннер и ошибка: как устроено состояние

Состояние экрана поиска описано так:

data class SearchState(
    val isLoading: Boolean = false,
    val items: List<Item> = emptyList(),
    val error: String? = null,
    val isEmpty: Boolean = false
)

QA приносит три бага подряд: спиннер поверх текста ошибки; надпись «ничего не найдено» вместе с непустым списком; пустой экран без спиннера и без ошибки после отмены запроса.

Какое решение устраняет причину, а не отдельные случаи?

  • Добавить во ViewModel проверки, которые при каждом изменении сбрасывают лишние флаги, — это дешевле переделки состояния и не трогает вёрстку экрана
  • Расставить приоритеты отображения во View: сначала ошибка, затем спиннер, затем список
  • Описать экран одним значением из закрытого набора состояний (загрузка, содержимое, пусто, ошибка), чтобы невозможные комбинации нельзя было выразить
  • Перерисовывать экран целиком на каждое изменение вместо частичного обновления отдельных вью

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

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

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

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