Skip to main content

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