Infinite scrolling for pager

This commit is contained in:
Syer10
2023-02-03 11:07:50 -05:00
parent bb63f0d014
commit b6e2db0c03
3 changed files with 320 additions and 14 deletions

View File

@@ -105,8 +105,7 @@ class ReaderMenuViewModel @Inject constructor(
?.pages
?.map { (it as? PagesState.Success)?.pages }
?: flowOf(null)
combine(previousChapterPages, chapterPages, nextChapterPages, readerModeSettings.continuous) { prev, cur, next, cont ->
if (cont) {
combine(previousChapterPages, chapterPages, nextChapterPages) { prev, cur, next ->
(
prev.orEmpty() +
ReaderPageSeparator(it.prevChapter, it.currChapter) +
@@ -114,13 +113,7 @@ class ReaderMenuViewModel @Inject constructor(
ReaderPageSeparator(it.currChapter, it.nextChapter) +
next.orEmpty()
).toImmutableList()
} else {
(
listOf(ReaderPageSeparator(it.prevChapter, it.currChapter)) +
cur.orEmpty() +
ReaderPageSeparator(it.currChapter, it.nextChapter)
).toImmutableList()
}
}
}.stateIn(scope, SharingStarted.Eagerly, persistentListOf())

View File

@@ -23,9 +23,9 @@ import ca.gosyer.jui.ui.reader.model.ReaderChapter
import ca.gosyer.jui.ui.reader.model.ReaderItem
import ca.gosyer.jui.ui.reader.model.ReaderPage
import ca.gosyer.jui.ui.reader.model.ReaderPageSeparator
import com.google.accompanist.pager.HorizontalPager
import com.google.accompanist.pager.VerticalPager
import com.google.accompanist.pager.rememberPagerState
import ca.gosyer.jui.uicore.pager.HorizontalPager
import ca.gosyer.jui.uicore.pager.VerticalPager
import ca.gosyer.jui.uicore.pager.rememberPagerState
import kotlinx.collections.immutable.ImmutableList
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.launchIn
@@ -88,7 +88,14 @@ fun PagerReader(
count = pages.size,
state = state,
reverseLayout = direction == Direction.Up,
modifier = modifier
modifier = modifier,
key = {
when (val page = pages.getOrNull(it)) {
is ReaderPage -> page.chapter.chapter.index to page.index
is ReaderPageSeparator -> page.previousChapter?.chapter?.index to page.nextChapter?.chapter?.index
else -> it
}
}
) {
HandlePager(
pages = pages,
@@ -104,7 +111,14 @@ fun PagerReader(
count = pages.size,
state = state,
reverseLayout = direction == Direction.Left,
modifier = modifier
modifier = modifier,
key = {
when (val page = pages.getOrNull(it)) {
is ReaderPage -> page.chapter.chapter.index to page.index
is ReaderPageSeparator -> page.previousChapter?.chapter?.index to page.nextChapter?.chapter?.index
else -> it
}
}
) {
HandlePager(
pages = pages,