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
|
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) {
|
LaunchedEffect(Unit) {
|
||||||
viewModel.init(
|
viewModel.init(
|
||||||
|
|
@ -119,21 +109,16 @@ fun ReaderScreenRoot() {
|
||||||
).show()
|
).show()
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
viewModel.onUpdateProgress(
|
||||||
|
onLibraryEvent = libraryViewModel::onEvent,
|
||||||
|
onHistoryEvent = historyViewModel::onEvent
|
||||||
|
)
|
||||||
}
|
}
|
||||||
LaunchedEffect(canScroll) {
|
LaunchedEffect(canScroll) {
|
||||||
if (!canScroll && !state.value.showMenu && !state.value.loading) {
|
if (!canScroll && !state.value.showMenu && !state.value.loading) {
|
||||||
viewModel.onEvent(ReaderEvent.OnShowHideMenu(context = context))
|
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) {
|
DisposableEffect(Unit) {
|
||||||
onDispose {
|
onDispose {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,6 @@ import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.unit.dp
|
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.removeDigits
|
||||||
import ua.acclorite.book_story.presentation.data.removeTrailingZero
|
import ua.acclorite.book_story.presentation.data.removeTrailingZero
|
||||||
import ua.acclorite.book_story.presentation.screens.history.data.HistoryEvent
|
import ua.acclorite.book_story.presentation.screens.history.data.HistoryEvent
|
||||||
|
|
@ -45,7 +44,6 @@ fun ReaderBottomBar(
|
||||||
onLibraryUpdateEvent: (LibraryEvent.OnUpdateBook) -> Unit,
|
onLibraryUpdateEvent: (LibraryEvent.OnUpdateBook) -> Unit,
|
||||||
onHistoryUpdateEvent: (HistoryEvent.OnUpdateBook) -> Unit
|
onHistoryUpdateEvent: (HistoryEvent.OnUpdateBook) -> Unit
|
||||||
) {
|
) {
|
||||||
val navigator = LocalNavigator.current
|
|
||||||
val progress by remember(state.value.book.progress) {
|
val progress by remember(state.value.book.progress) {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
(state.value.book.progress * 100)
|
(state.value.book.progress * 100)
|
||||||
|
|
@ -86,7 +84,6 @@ fun ReaderBottomBar(
|
||||||
onEvent(
|
onEvent(
|
||||||
ReaderEvent.OnChangeProgress(
|
ReaderEvent.OnChangeProgress(
|
||||||
progress = it,
|
progress = it,
|
||||||
navigator = navigator,
|
|
||||||
firstVisibleItemIndex = state.value.listState.firstVisibleItemIndex,
|
firstVisibleItemIndex = state.value.listState.firstVisibleItemIndex,
|
||||||
firstVisibleItemOffset = 0,
|
firstVisibleItemOffset = 0,
|
||||||
refreshList = { book ->
|
refreshList = { book ->
|
||||||
|
|
|
||||||
|
|
@ -217,5 +217,4 @@ fun LazyItemScope.ReaderTextParagraph(
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +70,6 @@ sealed class ReaderEvent {
|
||||||
|
|
||||||
data class OnChangeProgress(
|
data class OnChangeProgress(
|
||||||
val progress: Float,
|
val progress: Float,
|
||||||
val navigator: Navigator,
|
|
||||||
val firstVisibleItemIndex: Int,
|
val firstVisibleItemIndex: Int,
|
||||||
val firstVisibleItemOffset: Int,
|
val firstVisibleItemOffset: Int,
|
||||||
val refreshList: (Book) -> Unit
|
val refreshList: (Book) -> Unit
|
||||||
|
|
|
||||||
|
|
@ -1270,14 +1270,11 @@ class ReaderViewModel @Inject constructor(
|
||||||
|
|
||||||
@OptIn(FlowPreview::class)
|
@OptIn(FlowPreview::class)
|
||||||
suspend fun onUpdateProgress(
|
suspend fun onUpdateProgress(
|
||||||
firstVisibleItemIndex: Int,
|
|
||||||
firstVisibleItemOffset: Int,
|
|
||||||
navigator: Navigator,
|
|
||||||
onLibraryEvent: (LibraryEvent) -> Unit,
|
onLibraryEvent: (LibraryEvent) -> Unit,
|
||||||
onHistoryEvent: (HistoryEvent) -> Unit
|
onHistoryEvent: (HistoryEvent) -> Unit
|
||||||
) {
|
) {
|
||||||
snapshotFlow {
|
snapshotFlow {
|
||||||
firstVisibleItemIndex to firstVisibleItemOffset
|
_state.value.listState.firstVisibleItemIndex to _state.value.listState.firstVisibleItemScrollOffset
|
||||||
}
|
}
|
||||||
.debounce(300)
|
.debounce(300)
|
||||||
.collectLatest { items ->
|
.collectLatest { items ->
|
||||||
|
|
@ -1307,7 +1304,6 @@ class ReaderViewModel @Inject constructor(
|
||||||
onEvent(
|
onEvent(
|
||||||
ReaderEvent.OnChangeProgress(
|
ReaderEvent.OnChangeProgress(
|
||||||
progress = progress,
|
progress = progress,
|
||||||
navigator = navigator,
|
|
||||||
firstVisibleItemIndex = items.first,
|
firstVisibleItemIndex = items.first,
|
||||||
firstVisibleItemOffset = items.second,
|
firstVisibleItemOffset = items.second,
|
||||||
refreshList = { book ->
|
refreshList = { book ->
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue