moko-paging
moko-paging
Изучите страницу библиотеки в базе знаний.
moko-mvvm-state
moko-paging
использует ResourceState
- реализацию состояния из moko-mvvm, поэтому стоит разобраться с ней поподробнее.
Рассмотрим класс ResourceState<out T, out E>, он содержит четыре состояния:
Loading
- загрузкаSuccess
- успешная загрузкаFailed
- ошибка загрузкиEmpty
- пустота
Дженерики T
и E
отвечают за типы данных и ошибки, которые могут содержаться в объекте стейта.
Состояние Empty
- самое спорное:
- оно есть у списков
- его нет у единичных элементов, которые либо загрузятся, либо нет
Из-за этого мы обычно делаем свою реализацию класса State
для каждого конкретного экрана, полностью соответствующую статусной модели этого экрана, чтобы не обрабатывать состояние Empty
, которого просто нет. Однако, ResourceState
все также удобно использовать для экранов-списков.
В moko-mvvm-state
, также, содержится и набор extensions для более удобной работы с ResourceState
, например:
- asState() - получить стейт из данных
- data() - получить
LiveData
со значением из стейта - concatData() - объединение двух стейтов
- dataTransform() - преобразование полученных данных к другому типу. Например,
NewsItem
вNewsUnitItem
- объект новости в объект для списка новостей - errorTransform() - преобразование полученной ошибки к другому типу, например
Throwable
вStringDesc
- и т.д.
Практическое задание
Примените moko-paging
на экране списка репозиториев.