Просмотр исходного кода

fix: 清理全文搜索退出状态

HapeLee 3 месяцев назад
Родитель
Сommit
43f909fc23

+ 5 - 0
app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentScreen.kt

@@ -37,6 +37,7 @@ import androidx.compose.material3.ListItem
 import androidx.compose.material3.ListItemDefaults
 import androidx.compose.material3.animateFloatingActionButton
 import androidx.compose.runtime.Composable
+import androidx.compose.runtime.DisposableEffect
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.collectAsState
 import androidx.compose.runtime.getValue
@@ -94,6 +95,10 @@ fun SearchContentScreen(
     val listState = rememberLazyListState()
     val scope = rememberCoroutineScope()
 
+    DisposableEffect(viewModel) {
+        onDispose { viewModel.leaveSearch() }
+    }
+
     val scrollToCurrentChapter = {
         val targetIndex = searchResults.indexOfFirst { it.chapterIndex == durChapterIndex }
         if (targetIndex != -1) {

+ 13 - 0
app/src/main/java/io/legado/app/ui/book/searchContent/SearchContentViewModel.kt

@@ -190,6 +190,19 @@ class SearchContentViewModel(
         _uiState.update { it.copy(isSearching = false) }
     }
 
+    fun leaveSearch() {
+        searchJob?.cancel()
+        searchContentRepository.clearSession(bookUrl)
+        _searchQuery.value = ""
+        _uiState.update {
+            it.copy(
+                isSearching = false,
+                searchResults = emptyList(),
+                error = null
+            )
+        }
+    }
+
     fun shouldAutoScroll(): Boolean = searchResultIndex > 0 && !hasAutoScrolled
 
     fun markScrollDone() {