ReaderScreen: Great performance improvement by reducing recompositions count. (v1.0.1)
This commit is contained in:
parent
8ecdbfbc84
commit
0a06ccdc67
5 changed files with 5 additions and 29 deletions
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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 ->
|
||||
|
|
|
|||
|
|
@ -217,5 +217,4 @@ fun LazyItemScope.ReaderTextParagraph(
|
|||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 ->
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue