refactor(main, editor): 简化对话框实现

This commit is contained in:
Super12138 2025-02-06 10:42:23 +08:00
parent b3c36e97d7
commit 1aebd9f517
3 changed files with 35 additions and 18 deletions

View file

@ -1,5 +1,7 @@
package cn.super12138.todo.ui.components package cn.super12138.todo.ui.components
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.ErrorOutline
import androidx.compose.material3.AlertDialog import androidx.compose.material3.AlertDialog
import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -8,6 +10,30 @@ import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import cn.super12138.todo.R
@Composable
fun WarningDialog(
visible: Boolean,
icon: ImageVector = Icons.Outlined.ErrorOutline,
description: String,
onConfirm: () -> Unit,
onDismiss: () -> Unit,
modifier: Modifier = Modifier
) {
BasicDialog(
visible = visible,
icon = icon,
title = stringResource(R.string.title_warning),
text = { Text(description) },
confirmButton = stringResource(R.string.action_confirm),
dismissButton = stringResource(R.string.action_cancel),
onConfirm = onConfirm,
onDismiss = onDismiss,
modifier = modifier
)
}
@Composable @Composable
fun BasicDialog( fun BasicDialog(
@ -29,9 +55,7 @@ fun BasicDialog(
contentDescription = null // 会跟下面的文本重复,所以设置为 null contentDescription = null // 会跟下面的文本重复,所以设置为 null
) )
}, },
title = { title = { Text(title) },
Text(title)
},
text = text, text = text,
confirmButton = { confirmButton = {
FilledTonalButton(onClick = onConfirm) { FilledTonalButton(onClick = onConfirm) {

View file

@ -19,8 +19,8 @@ import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
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.outlined.Delete import androidx.compose.material.icons.outlined.Delete
import androidx.compose.material.icons.outlined.ErrorOutline
import androidx.compose.material.icons.outlined.Save import androidx.compose.material.icons.outlined.Save
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
@ -53,9 +53,9 @@ import cn.super12138.todo.logic.model.Priority
import cn.super12138.todo.logic.model.Subjects import cn.super12138.todo.logic.model.Subjects
import cn.super12138.todo.ui.TodoDefaults import cn.super12138.todo.ui.TodoDefaults
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
import cn.super12138.todo.ui.components.BasicDialog
import cn.super12138.todo.ui.components.FilterChipGroup import cn.super12138.todo.ui.components.FilterChipGroup
import cn.super12138.todo.ui.components.LargeTopAppBarScaffold import cn.super12138.todo.ui.components.LargeTopAppBarScaffold
import cn.super12138.todo.ui.components.WarningDialog
@OptIn(ExperimentalMaterial3Api::class, ExperimentalSharedTransitionApi::class) @OptIn(ExperimentalMaterial3Api::class, ExperimentalSharedTransitionApi::class)
@Composable @Composable
@ -245,13 +245,10 @@ fun TodoEditorPage(
} }
} }
BasicDialog( WarningDialog(
visible = showConfirmDialog, visible = showConfirmDialog,
icon = Icons.Outlined.ErrorOutline, icon = Icons.AutoMirrored.Outlined.Undo,
title = stringResource(R.string.title_warning), description = stringResource(R.string.tip_discard_changes),
text = { Text(stringResource(R.string.tip_discard_changes)) },
confirmButton = stringResource(R.string.action_confirm),
dismissButton = stringResource(R.string.action_cancel),
onConfirm = { onConfirm = {
showConfirmDialog = false showConfirmDialog = false
onNavigateUp() onNavigateUp()

View file

@ -38,6 +38,7 @@ import cn.super12138.todo.R
import cn.super12138.todo.constants.Constants import cn.super12138.todo.constants.Constants
import cn.super12138.todo.logic.database.TodoEntity import cn.super12138.todo.logic.database.TodoEntity
import cn.super12138.todo.ui.components.BasicDialog import cn.super12138.todo.ui.components.BasicDialog
import cn.super12138.todo.ui.components.WarningDialog
import cn.super12138.todo.ui.pages.main.components.TodoFAB import cn.super12138.todo.ui.pages.main.components.TodoFAB
import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar import cn.super12138.todo.ui.pages.main.components.TodoTopAppBar
import cn.super12138.todo.ui.viewmodels.MainViewModel import cn.super12138.todo.ui.viewmodels.MainViewModel
@ -209,15 +210,10 @@ fun MainPage(
} }
} }
BasicDialog( WarningDialog(
visible = showDeleteConfirmDialog, visible = showDeleteConfirmDialog,
icon = Icons.Outlined.Delete, icon = Icons.Outlined.Delete,
title = stringResource(R.string.title_warning), description = stringResource(R.string.tip_delete_task, selectedTodoIds.value.size),
text = {
Text(stringResource(R.string.tip_delete_task, selectedTodoIds.value.size))
},
confirmButton = stringResource(R.string.action_confirm),
dismissButton = stringResource(R.string.action_cancel),
onConfirm = { onConfirm = {
showDeleteConfirmDialog = false showDeleteConfirmDialog = false
viewModel.deleteSelectedTodo() viewModel.deleteSelectedTodo()