fix: change searchbar

This commit is contained in:
AnranYus
2024-06-15 18:54:21 +08:00
parent a56d021a4a
commit 1d208099f9
3 changed files with 22 additions and 12 deletions
@@ -37,15 +37,19 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Surface
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
@@ -74,6 +78,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
private const val TAG = "Compose_PostActivity"
@@ -147,13 +152,14 @@ fun App(viewModel: PostViewModel = viewModel()) {
}
@OptIn(ExperimentalFoundationApi::class)
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
@Composable
fun PostListScreen(
navController: NavController, onNavigateToDetail: (Post) -> Unit, viewModel: PostViewModel
) {
val postList by viewModel.postData.collectAsState()
val listState = rememberLazyStaggeredGridState()
val uiState by viewModel.uiState.collectAsState()
LaunchedEffect(listState) {
snapshotFlow { listState.layoutInfo }.map { layoutInfo ->
@@ -166,13 +172,17 @@ fun PostListScreen(
}
}
val uiState by viewModel.uiState.collectAsState()
Column {
val scope = rememberCoroutineScope()
Scaffold(topBar = {
Row(modifier = Modifier.padding(vertical = 12.dp)) {
SearchBar(uiState.searchTarget) {
SearchBar(uiState.searchTarget.value) {
viewModel.fetchPost(it, refresh = true)
scope.launch {
listState.animateScrollToItem(index = 0)
}
}
}
}, containerColor = Color.Transparent) {
Row {
LazyVerticalStaggeredGrid(
state = listState,
@@ -191,14 +201,12 @@ fun PostListScreen(
}
},
modifier = Modifier.background(Color.Transparent)
modifier = Modifier
.background(Color.Transparent)
.padding(top = it.calculateTopPadding())
)
}
}
}
@Composable
@@ -1,10 +1,12 @@
package com.lsp.view.ui.compose
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf
import com.lsp.view.bean.Post
data class PostUiState(
var refresh:Boolean = false,
var searchTarget: String = "",
var searchTarget: MutableState<String> = mutableStateOf(""),
val source: String = "",
val safeModel: Boolean = false, //安全模式
var page:Int = 1,
@@ -34,9 +34,9 @@ class PostViewModel:ViewModel() {
downloadAction.postValue(Unit)
}
fun fetchPost(searchTarget: String = _uiState.value.searchTarget,refresh:Boolean = false){
fun fetchPost(searchTarget: String = _uiState.value.searchTarget.value,refresh:Boolean = false){
viewModelScope.launch(Dispatchers.IO) {
_uiState.value.searchTarget = searchTarget
_uiState.value.searchTarget.value = searchTarget
try {
val data = repository.fetchPostData(
searchTarget,