enhance(Compose): Allow appBar to scroll only when content doesn't fit

This commit is contained in:
ziro 2024-01-14 20:53:19 +07:00
parent 27dbedfcd6
commit 4568e03f5a
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
2 changed files with 13 additions and 4 deletions

View file

@ -3,8 +3,11 @@ package dev.yokai.presentation.extension.repo
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ExtensionOff
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
@ -32,11 +35,16 @@ fun ExtensionRepoScreen(
val context = LocalContext.current
val repoState = viewModel.repoState.collectAsState()
var inputText by remember { mutableStateOf("") }
val listState = rememberLazyListState()
YokaiScaffold(
onNavigationIconClicked = onBackPress,
title = title,
appBarType = AppBarType.SMALL,
scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
state = rememberTopAppBarState(),
canScroll = { listState.firstVisibleItemIndex > 0 || listState.firstVisibleItemScrollOffset > 0 },
),
) { innerPadding ->
if (repoState.value is ExtensionRepoState.Loading) return@YokaiScaffold
@ -46,6 +54,7 @@ fun ExtensionRepoScreen(
modifier = Modifier.padding(innerPadding),
userScrollEnabled = true,
verticalArrangement = Arrangement.Top,
state = listState,
) {
item {
ExtensionRepoItem(

View file

@ -38,11 +38,11 @@ class ExtensionRepoViewModel :
fun addRepo(url: String) {
viewModelScope.launchIO {
val result = repository.addRepo(url)
if (result is Result.Error) {
internalEvent.value = ExtensionRepoEvent.InvalidUrl
return@launchIO
when (result) {
is Result.Error -> internalEvent.value = ExtensionRepoEvent.InvalidUrl
is Result.Success -> internalEvent.value = ExtensionRepoEvent.Success
else -> internalEvent.value = ExtensionRepoEvent.NoOp
}
internalEvent.value = ExtensionRepoEvent.Success
}
}