* 重构空书架状态处理机制,提高分页器索引的安全性

This commit is contained in:
aoi
2026-05-23 03:01:52 +08:00
committed by GitHub
parent bbec36bf36
commit 26167c8528
@@ -210,60 +210,6 @@ fun BookshelfScreen(
}
)
if (uiState.groups.isEmpty()) {
val scrollBehavior = GlassTopAppBarDefaults.defaultScrollBehavior()
val onSearchClick = {
if (BookshelfConfig.bookshelfSearchActionDirectToSearchState.value) {
onNavigateToSearch(uiState.searchKey.trim())
} else {
viewModel.setSearchMode(!uiState.isSearch)
}
}
AppScaffold(
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
contentWindowInsets = WindowInsets(0),
snackbarHost = {
SnackbarHost(
hostState = snackbarHostState,
modifier = Modifier
.padding(
bottom = 72.dp + WindowInsets.navigationBars
.asPaddingValues()
.calculateBottomPadding()
)
)
},
topBar = {
BookshelfTopBar(
uiState = uiState,
scrollBehavior = scrollBehavior,
onSearchClick = onSearchClick,
onSearchQueryChange = { viewModel.setSearchKey(it) },
onSearchSubmit = { rawQuery ->
rawQuery.trim()
.takeIf { it.isNotEmpty() }
?.let(onNavigateToSearch)
},
onClearSearch = { viewModel.setSearchKey("") }
)
}
) { paddingValues ->
if (!uiState.isInitialLoading) {
EmptyMessage(
modifier = Modifier
.fillMaxSize()
.padding(
top = paddingValues.calculateTopPadding(),
bottom = 120.dp
),
messageResId = R.string.bookshelf_empty
)
}
}
return
}
val activeOverlay = uiState.activeOverlay
val showGroupMenu = activeOverlay == BookshelfOverlay.GroupMenu
val isEditMode = uiState.isEditMode
@@ -280,7 +226,7 @@ fun BookshelfScreen(
}
val pagerState = rememberPagerState(
initialPage = uiState.selectedGroupIndex,
initialPage = uiState.selectedGroupIndex.coerceAtLeast(0),
pageCount = { uiState.groups.size }
)
val latestGroups by rememberUpdatedState(uiState.groups)
@@ -765,7 +711,19 @@ fun BookshelfScreen(
}
}
) { isRoot ->
if (bookGroupStyle == 2 && isRoot && !isUsingStandaloneSearchGroup) {
if (uiState.groups.isEmpty() && !uiState.isSearch) {
if (!uiState.isInitialLoading) {
EmptyMessage(
modifier = Modifier
.fillMaxSize()
.padding(
top = paddingValues.calculateTopPadding(),
bottom = 120.dp
),
messageResId = R.string.bookshelf_empty
)
}
} else if (bookGroupStyle == 2 && isRoot && !isUsingStandaloneSearchGroup) {
val folderColumns =
if (bookshelfFolderLayoutMode == 0) bookshelfFolderLayoutList else bookshelfFolderLayoutGrid
val isGridMode = bookshelfFolderLayoutMode != 0