UI: animate FAB on model preselection states
This commit is contained in:
parent
05c620cc52
commit
d97e28a6d8
|
|
@ -1,5 +1,10 @@
|
|||
package com.example.llama.revamp.ui.scaffold
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.scaleIn
|
||||
import androidx.compose.animation.scaleOut
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.text.input.TextFieldState
|
||||
|
|
@ -236,9 +241,13 @@ fun ModelSelectionBottomBar(
|
|||
},
|
||||
floatingActionButton = {
|
||||
// Only show FAB if a model is selected
|
||||
runAction.selectedModel?.let { model ->
|
||||
AnimatedVisibility(
|
||||
visible = runAction.selectedModel != null,
|
||||
enter = scaleIn() + fadeIn(),
|
||||
exit = scaleOut() + fadeOut()
|
||||
) {
|
||||
FloatingActionButton(
|
||||
onClick = { runAction.onRun(model) },
|
||||
onClick = { runAction.selectedModel?.let { runAction.onRun(it) } },
|
||||
containerColor = MaterialTheme.colorScheme.primary
|
||||
) {
|
||||
Icon(
|
||||
|
|
|
|||
|
|
@ -51,9 +51,11 @@ fun ModelSelectionScreen(
|
|||
onManageModelsClicked: () -> Unit,
|
||||
viewModel: ModelSelectionViewModel,
|
||||
) {
|
||||
// Data: models
|
||||
val filteredModels by viewModel.filteredModels.collectAsState()
|
||||
val preselectedModel by viewModel.preselectedModel.collectAsState()
|
||||
|
||||
// Query states
|
||||
val textFieldState = viewModel.searchFieldState
|
||||
val isSearchActive by viewModel.isSearchActive.collectAsState()
|
||||
val searchQuery by remember(textFieldState) {
|
||||
|
|
@ -61,15 +63,15 @@ fun ModelSelectionScreen(
|
|||
}
|
||||
val queryResults by viewModel.queryResults.collectAsState()
|
||||
|
||||
// Filter states
|
||||
val activeFilters by viewModel.activeFilters.collectAsState()
|
||||
val activeFiltersCount by remember(activeFilters) {
|
||||
derivedStateOf { activeFilters.count { it.value } }
|
||||
}
|
||||
|
||||
|
||||
// UI states
|
||||
val focusRequester = remember { FocusRequester() }
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
|
||||
val toggleSearchFocusAndIme: (Boolean) -> Unit = { show ->
|
||||
if (show) {
|
||||
focusRequester.requestFocus()
|
||||
|
|
|
|||
Loading…
Reference in New Issue