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

View file

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

View file

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