Paging Library

Возможно не очень популярное мнение, но хуже библиотеки у гугла нет, из актуальных. Это отличный пример ситуации, когда нужно было вовремя остановиться.

Гугл решил погнаться за всеми зайцами на свете. В попытке сделать абстракции над всеми возможными способами пагинации как будто бы потерялся какой-либо смысл использовать эту библиотеку. И к третьей версии сильно лучше до сих пор не стало. Скоро у библиотек пагинации будет своя пагинация.

С архитектурной точки зрения это какая-то жесть. Flow тянется из data слоя в UI, причём UI напрямую им и управляет, говорит что грузить. Мимо всяких твоих стейтов экрана, мимо всех слоёв твоей архитектуры, просто поток данных.

Соответственно если нужно данные из загруженных страниц как-то подготовить для представления, насытить их какими-то дополнительными полями, менять их на ходу, то обречены вы на то, чтобы комбайны всякие городить над flow. Ну то есть вариантов то работы с flow больше то и нет, но я изначально не особо понимаю зачем UI слою flow, а не просто стейт с листом моделек.

Докопаться хочется даже до нейминга, потому что в какой вообще вселенной LazyPagingItems - это не какая-то коллекция, а объект, из которого можно достать стейт или ретрайнуть загрузку?

Очистить список при изменении пейджера - никак, нет таких методов. Запомнить страницу, которая показывается юзеру, чтобы при перезапуске с неё начать грузить - никак, нет таких колбэков. Рефрешнуть страницу - только из композабл функции, из логики нельзя. Какие-то cachedIn у flow, какие-то refresh keys - всё это как будто бы решает проблемы, которых у меня не было, будь у меня просто список в стейте вьюмодели.

Кейсы у меня что ли такие сложные? Я вполне допускаю что делаю что-то не так, но сколько я не пытался к себе прикрутить гугловый пейджинг - всегда какая-то фигня получалась, если это не самый простейший кейс с дозагрузкой только вниз, где можно забить на стейт при перезапуске. И даже этот кейс решается без paging library гораздо более гибко. Абсурд какой-то. Зачем она нужна то?

Вот и в этот раз попытался разобраться, не понял зачем мне это надо, и написал своё.