fix: 小屏幕中编辑器 FAB 会挡住内容

This commit is contained in:
Super12138 2025-07-08 17:30:36 +08:00
parent f6bb037323
commit cbdb55df6a
3 changed files with 19 additions and 14 deletions

View file

@ -11,10 +11,12 @@ import androidx.compose.animation.fadeOut
import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.outlined.Undo
@ -255,6 +257,10 @@ fun TodoEditorPage(
}
}
}
item {
Spacer(modifier = Modifier.size(80.dp))
}
}
ConfirmDialog(

View file

@ -58,22 +58,20 @@ fun MainPage(
var showDeleteConfirmDialog by rememberSaveable { mutableStateOf(false) }
val selectedTodoIds by remember { derivedStateOf { selectedTodos.value } }
val isSelectedIdsEmpty by remember { derivedStateOf { selectedTodoIds.isEmpty() } }
val inSelectedMode by remember { derivedStateOf { !selectedTodoIds.isEmpty() } }
val toDoList by remember { derivedStateOf { toDos.value } }
val totalTasks by remember { derivedStateOf { toDoList.size } }
val completedTasks by remember { derivedStateOf { toDoList.count { it.isCompleted } } }
val filteredTodoList = if (showCompleted) toDoList else toDoList.filter { item -> !item.isCompleted }
val filteredTodoList = if (showCompleted) toDoList else toDoList.filter { item -> !item.isCompleted }
BackHandler(enabled = !isSelectedIdsEmpty) {
// 当按下返回键(或进行返回操作)时清空选择
viewModel.clearAllTodoSelection()
}
// 当按下返回键(或进行返回操作)时清空选择,仅在非选择模式下生效
BackHandler(inSelectedMode) { viewModel.clearAllTodoSelection() }
Scaffold(
topBar = {
TodoTopAppBar(
selectedTodoIds = selectedTodoIds,
selectedMode = !isSelectedIdsEmpty,
selectedMode = inSelectedMode,
onCancelSelect = { viewModel.clearAllTodoSelection() },
onSelectAll = { viewModel.selectAllTodos() },
onDeleteSelectedTodo = { showDeleteConfirmDialog = true },
@ -83,7 +81,7 @@ fun MainPage(
floatingActionButton = {
with(sharedTransitionScope) {
AnimatedVisibility(
visible = isSelectedIdsEmpty,
visible = inSelectedMode,
enter = fadeIn() + expandIn(),
exit = shrinkOut() + fadeOut()
) {
@ -120,11 +118,11 @@ fun MainPage(
state = listState,
list = filteredTodoList,
onItemClick = { item ->
if (isSelectedIdsEmpty) {
if (inSelectedMode) {
viewModel.toggleTodoSelection(item)
} else {
viewModel.setEditTodoItem(item)
toTodoEditPage()
} else {
viewModel.toggleTodoSelection(item)
}
},
onItemLongClick = { viewModel.toggleTodoSelection(it) },
@ -163,11 +161,11 @@ fun MainPage(
state = listState,
list = filteredTodoList,
onItemClick = { item ->
if (isSelectedIdsEmpty) {
if (inSelectedMode) {
viewModel.toggleTodoSelection(item)
} else {
viewModel.setEditTodoItem(item)
toTodoEditPage()
} else {
viewModel.toggleTodoSelection(item)
}
},
onItemLongClick = { viewModel.toggleTodoSelection(it) },

View file

@ -47,6 +47,7 @@ fun SettingsDataCategory(
modifier: Modifier = Modifier
) {
// TODO: 本页及其相关组件重组性能检查优化
// TODO: 优化内部项目样式
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()
val snackbarHostState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()