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 на экране списка репозиториев.