ReaderScreen: Great performance improvement by reducing recompositions count. (v1.0.1)

This commit is contained in:
acclorite 2024-06-12 17:04:30 +03:00
parent 8ecdbfbc84
commit 0a06ccdc67
5 changed files with 5 additions and 29 deletions

View file

@ -92,16 +92,6 @@ fun ReaderScreenRoot() {
state.value.listState.canScrollBackward && state.value.listState.canScrollForward
}
}
val firstVisibleItemIndex = remember {
derivedStateOf {
state.value.listState.firstVisibleItemIndex
}
}
val firstVisibleItemOffset = remember {
derivedStateOf {
state.value.listState.firstVisibleItemScrollOffset
}
}
LaunchedEffect(Unit) {
viewModel.init(
@ -119,21 +109,16 @@ fun ReaderScreenRoot() {
).show()
}
)
viewModel.onUpdateProgress(
onLibraryEvent = libraryViewModel::onEvent,
onHistoryEvent = historyViewModel::onEvent
)
}
LaunchedEffect(canScroll) {
if (!canScroll && !state.value.showMenu && !state.value.loading) {
viewModel.onEvent(ReaderEvent.OnShowHideMenu(context = context))
}
}
LaunchedEffect(firstVisibleItemIndex.value, firstVisibleItemOffset.value) {
viewModel.onUpdateProgress(
firstVisibleItemIndex = firstVisibleItemIndex.value,
firstVisibleItemOffset = firstVisibleItemOffset.value,
navigator = navigator,
onLibraryEvent = libraryViewModel::onEvent,
onHistoryEvent = historyViewModel::onEvent
)
}
DisposableEffect(Unit) {
onDispose {

View file

@ -21,7 +21,6 @@ import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import ua.acclorite.book_story.presentation.data.LocalNavigator
import ua.acclorite.book_story.presentation.data.removeDigits
import ua.acclorite.book_story.presentation.data.removeTrailingZero
import ua.acclorite.book_story.presentation.screens.history.data.HistoryEvent
@ -45,7 +44,6 @@ fun ReaderBottomBar(
onLibraryUpdateEvent: (LibraryEvent.OnUpdateBook) -> Unit,
onHistoryUpdateEvent: (HistoryEvent.OnUpdateBook) -> Unit
) {
val navigator = LocalNavigator.current
val progress by remember(state.value.book.progress) {
derivedStateOf {
(state.value.book.progress * 100)
@ -86,7 +84,6 @@ fun ReaderBottomBar(
onEvent(
ReaderEvent.OnChangeProgress(
progress = it,
navigator = navigator,
firstVisibleItemIndex = state.value.listState.firstVisibleItemIndex,
firstVisibleItemOffset = 0,
refreshList = { book ->

View file

@ -217,5 +217,4 @@ fun LazyItemScope.ReaderTextParagraph(
)
)
}
}

View file

@ -70,7 +70,6 @@ sealed class ReaderEvent {
data class OnChangeProgress(
val progress: Float,
val navigator: Navigator,
val firstVisibleItemIndex: Int,
val firstVisibleItemOffset: Int,
val refreshList: (Book) -> Unit

View file

@ -1270,14 +1270,11 @@ class ReaderViewModel @Inject constructor(
@OptIn(FlowPreview::class)
suspend fun onUpdateProgress(
firstVisibleItemIndex: Int,
firstVisibleItemOffset: Int,
navigator: Navigator,
onLibraryEvent: (LibraryEvent) -> Unit,
onHistoryEvent: (HistoryEvent) -> Unit
) {
snapshotFlow {
firstVisibleItemIndex to firstVisibleItemOffset
_state.value.listState.firstVisibleItemIndex to _state.value.listState.firstVisibleItemScrollOffset
}
.debounce(300)
.collectLatest { items ->
@ -1307,7 +1304,6 @@ class ReaderViewModel @Inject constructor(
onEvent(
ReaderEvent.OnChangeProgress(
progress = progress,
navigator = navigator,
firstVisibleItemIndex = items.first,
firstVisibleItemOffset = items.second,
refreshList = { book ->