refactor: 优化对话框实现 & 调整参数顺序
This commit is contained in:
parent
60927892c4
commit
7fd200c789
8 changed files with 39 additions and 77 deletions
|
|
@ -34,7 +34,7 @@ android {
|
||||||
applicationId = "cn.super12138.todo"
|
applicationId = "cn.super12138.todo"
|
||||||
minSdk = 24
|
minSdk = 24
|
||||||
targetSdk = 36
|
targetSdk = 36
|
||||||
versionCode = 605
|
versionCode = 606
|
||||||
versionName = "2.1.2"
|
versionName = "2.1.2"
|
||||||
|
|
||||||
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
|
|
||||||
|
|
@ -20,22 +20,25 @@ import cn.super12138.todo.R
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun WarningDialog(
|
fun ConfirmDialog(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
visible: Boolean,
|
visible: Boolean,
|
||||||
icon: ImageVector = Icons.Outlined.ErrorOutline,
|
icon: ImageVector = Icons.Outlined.ErrorOutline,
|
||||||
description: String,
|
title: String = stringResource(R.string.title_warning),
|
||||||
onConfirm: () -> Unit,
|
text: String,
|
||||||
onDismiss: () -> Unit,
|
confirmButtonText: String = stringResource(R.string.action_confirm),
|
||||||
|
dismissButtonText: String = stringResource(R.string.action_cancel),
|
||||||
properties: DialogProperties = DialogProperties(),
|
properties: DialogProperties = DialogProperties(),
|
||||||
modifier: Modifier = Modifier
|
onConfirm: () -> Unit,
|
||||||
|
onDismiss: () -> Unit
|
||||||
) {
|
) {
|
||||||
BasicDialog(
|
BasicDialog(
|
||||||
visible = visible,
|
visible = visible,
|
||||||
icon = icon,
|
icon = icon,
|
||||||
title = stringResource(R.string.title_warning),
|
title = title,
|
||||||
text = { Text(description) },
|
text = { Text(text) }, // 已经实现好滚动了
|
||||||
confirmButton = stringResource(R.string.action_confirm),
|
confirmButton = confirmButtonText,
|
||||||
dismissButton = stringResource(R.string.action_cancel),
|
dismissButton = dismissButtonText,
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
onConfirm()
|
onConfirm()
|
||||||
onDismiss()
|
onDismiss()
|
||||||
|
|
@ -46,49 +49,9 @@ fun WarningDialog(
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun ConfirmDialog(
|
|
||||||
visible: Boolean,
|
|
||||||
icon: ImageVector,
|
|
||||||
title: String,
|
|
||||||
text: String,
|
|
||||||
confirmButton: String,
|
|
||||||
onConfirm: () -> Unit,
|
|
||||||
onDismiss: () -> Unit,
|
|
||||||
properties: DialogProperties = DialogProperties(),
|
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
|
||||||
val view = LocalView.current
|
|
||||||
BasicDialog(
|
|
||||||
visible = visible,
|
|
||||||
icon = {
|
|
||||||
Icon(
|
|
||||||
imageVector = icon,
|
|
||||||
contentDescription = null // 会跟下面的文本重复,所以设置为 null
|
|
||||||
)
|
|
||||||
},
|
|
||||||
title = { Text(title) },
|
|
||||||
text = { Text(text) },
|
|
||||||
confirmButton = {
|
|
||||||
FilledTonalButton(
|
|
||||||
onClick = {
|
|
||||||
VibrationUtils.performHapticFeedback(view)
|
|
||||||
onConfirm()
|
|
||||||
onDismiss()
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
Text(confirmButton)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
dismissButton = {},
|
|
||||||
onDismissRequest = onDismiss,
|
|
||||||
properties = properties,
|
|
||||||
modifier = modifier
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun BasicDialog(
|
fun BasicDialog(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
visible: Boolean,
|
visible: Boolean,
|
||||||
icon: ImageVector,
|
icon: ImageVector,
|
||||||
title: String,
|
title: String,
|
||||||
|
|
@ -97,8 +60,7 @@ fun BasicDialog(
|
||||||
dismissButton: String,
|
dismissButton: String,
|
||||||
onConfirm: () -> Unit,
|
onConfirm: () -> Unit,
|
||||||
onDismiss: () -> Unit,
|
onDismiss: () -> Unit,
|
||||||
properties: DialogProperties = DialogProperties(),
|
properties: DialogProperties = DialogProperties()
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
BasicDialog(
|
BasicDialog(
|
||||||
|
|
@ -110,7 +72,11 @@ fun BasicDialog(
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
title = { Text(title) },
|
title = { Text(title) },
|
||||||
text = text,
|
text = {
|
||||||
|
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
|
||||||
|
text?.let { it() }
|
||||||
|
}
|
||||||
|
},
|
||||||
confirmButton = {
|
confirmButton = {
|
||||||
FilledTonalButton(
|
FilledTonalButton(
|
||||||
onClick = {
|
onClick = {
|
||||||
|
|
@ -139,6 +105,7 @@ fun BasicDialog(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun BasicDialog(
|
fun BasicDialog(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
visible: Boolean,
|
visible: Boolean,
|
||||||
icon: @Composable (() -> Unit)? = null,
|
icon: @Composable (() -> Unit)? = null,
|
||||||
title: @Composable () -> Unit,
|
title: @Composable () -> Unit,
|
||||||
|
|
@ -146,18 +113,13 @@ fun BasicDialog(
|
||||||
confirmButton: (@Composable () -> Unit),
|
confirmButton: (@Composable () -> Unit),
|
||||||
dismissButton: (@Composable () -> Unit)? = null,
|
dismissButton: (@Composable () -> Unit)? = null,
|
||||||
onDismissRequest: () -> Unit,
|
onDismissRequest: () -> Unit,
|
||||||
properties: DialogProperties = DialogProperties(),
|
properties: DialogProperties = DialogProperties()
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
if (visible) {
|
if (visible) {
|
||||||
AlertDialog(
|
AlertDialog(
|
||||||
icon = icon,
|
icon = icon,
|
||||||
title = title,
|
title = title,
|
||||||
text = {
|
text = text,
|
||||||
Column(modifier = Modifier.verticalScroll(rememberScrollState())) {
|
|
||||||
text?.let { it() }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
confirmButton = confirmButton,
|
confirmButton = confirmButton,
|
||||||
dismissButton = dismissButton,
|
dismissButton = dismissButton,
|
||||||
onDismissRequest = onDismissRequest,
|
onDismissRequest = onDismissRequest,
|
||||||
|
|
|
||||||
|
|
@ -38,6 +38,7 @@ import cn.super12138.todo.utils.VibrationUtils
|
||||||
*/
|
*/
|
||||||
@Composable
|
@Composable
|
||||||
fun AnimatedExtendedFloatingActionButton(
|
fun AnimatedExtendedFloatingActionButton(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
icon: ImageVector,
|
icon: ImageVector,
|
||||||
text: String,
|
text: String,
|
||||||
textOverflow: TextOverflow = TextOverflow.Clip,
|
textOverflow: TextOverflow = TextOverflow.Clip,
|
||||||
|
|
@ -45,8 +46,7 @@ fun AnimatedExtendedFloatingActionButton(
|
||||||
containerColor: Color = FloatingActionButtonDefaults.containerColor,
|
containerColor: Color = FloatingActionButtonDefaults.containerColor,
|
||||||
contentColor: Color = contentColorFor(containerColor),
|
contentColor: Color = contentColorFor(containerColor),
|
||||||
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
|
elevation: FloatingActionButtonElevation = FloatingActionButtonDefaults.elevation(),
|
||||||
onClick: () -> Unit,
|
onClick: () -> Unit
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
FloatingActionButton(
|
FloatingActionButton(
|
||||||
|
|
|
||||||
|
|
@ -28,9 +28,9 @@ import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Konfetti(
|
fun Konfetti(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
state: MutableState<Boolean>,
|
state: MutableState<Boolean>,
|
||||||
primary: Color = MaterialTheme.colorScheme.primary,
|
primary: Color = MaterialTheme.colorScheme.primary
|
||||||
modifier: Modifier = Modifier
|
|
||||||
) {
|
) {
|
||||||
var visible by state
|
var visible by state
|
||||||
if (!visible) {
|
if (!visible) {
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,7 @@ import cn.super12138.todo.utils.VibrationUtils
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun LargeTopAppBarScaffold(
|
fun LargeTopAppBarScaffold(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
title: String,
|
title: String,
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
onBack: () -> Unit,
|
onBack: () -> Unit,
|
||||||
|
|
@ -46,7 +47,6 @@ fun LargeTopAppBarScaffold(
|
||||||
floatingActionButton: @Composable () -> Unit = {},
|
floatingActionButton: @Composable () -> Unit = {},
|
||||||
floatingActionButtonPosition: FabPosition = FabPosition.End,
|
floatingActionButtonPosition: FabPosition = FabPosition.End,
|
||||||
contentWindowInsets: WindowInsets = WindowInsets.safeContent.exclude(WindowInsets.ime),
|
contentWindowInsets: WindowInsets = WindowInsets.safeContent.exclude(WindowInsets.ime),
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
content: @Composable (PaddingValues) -> Unit
|
content: @Composable (PaddingValues) -> Unit
|
||||||
) {
|
) {
|
||||||
val view = LocalView.current
|
val view = LocalView.current
|
||||||
|
|
@ -75,7 +75,8 @@ fun LargeTopAppBarScaffold(
|
||||||
snackbarHost = snackbarHost,
|
snackbarHost = snackbarHost,
|
||||||
floatingActionButton = floatingActionButton,
|
floatingActionButton = floatingActionButton,
|
||||||
floatingActionButtonPosition = floatingActionButtonPosition,
|
floatingActionButtonPosition = floatingActionButtonPosition,
|
||||||
contentWindowInsets = contentWindowInsets
|
contentWindowInsets = contentWindowInsets,
|
||||||
|
modifier = modifier
|
||||||
) { innerPadding ->
|
) { innerPadding ->
|
||||||
Box { content(innerPadding) }
|
Box { content(innerPadding) }
|
||||||
}
|
}
|
||||||
|
|
@ -84,6 +85,7 @@ fun LargeTopAppBarScaffold(
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun LargeTopAppBarScaffold(
|
fun LargeTopAppBarScaffold(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
title: @Composable () -> Unit = {},
|
title: @Composable () -> Unit = {},
|
||||||
navigationIcon: @Composable () -> Unit = {},
|
navigationIcon: @Composable () -> Unit = {},
|
||||||
actions: @Composable RowScope.() -> Unit = {},
|
actions: @Composable RowScope.() -> Unit = {},
|
||||||
|
|
@ -92,7 +94,6 @@ fun LargeTopAppBarScaffold(
|
||||||
floatingActionButton: @Composable () -> Unit = {},
|
floatingActionButton: @Composable () -> Unit = {},
|
||||||
floatingActionButtonPosition: FabPosition = FabPosition.End,
|
floatingActionButtonPosition: FabPosition = FabPosition.End,
|
||||||
contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,
|
contentWindowInsets: WindowInsets = ScaffoldDefaults.contentWindowInsets,
|
||||||
modifier: Modifier = Modifier,
|
|
||||||
content: @Composable (PaddingValues) -> Unit
|
content: @Composable (PaddingValues) -> Unit
|
||||||
) {
|
) {
|
||||||
Scaffold(
|
Scaffold(
|
||||||
|
|
|
||||||
|
|
@ -58,9 +58,9 @@ 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.ChipItem
|
import cn.super12138.todo.ui.components.ChipItem
|
||||||
|
import cn.super12138.todo.ui.components.ConfirmDialog
|
||||||
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
|
|
||||||
import cn.super12138.todo.utils.VibrationUtils
|
import cn.super12138.todo.utils.VibrationUtils
|
||||||
|
|
||||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalSharedTransitionApi::class)
|
@OptIn(ExperimentalMaterial3Api::class, ExperimentalSharedTransitionApi::class)
|
||||||
|
|
@ -310,10 +310,10 @@ fun TodoEditorPage(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WarningDialog(
|
ConfirmDialog(
|
||||||
visible = showExitConfirmDialog,
|
visible = showExitConfirmDialog,
|
||||||
icon = Icons.AutoMirrored.Outlined.Undo,
|
icon = Icons.AutoMirrored.Outlined.Undo,
|
||||||
description = stringResource(R.string.tip_discard_changes),
|
text = stringResource(R.string.tip_discard_changes),
|
||||||
onConfirm = {
|
onConfirm = {
|
||||||
showExitConfirmDialog = false
|
showExitConfirmDialog = false
|
||||||
onNavigateUp()
|
onNavigateUp()
|
||||||
|
|
@ -321,10 +321,10 @@ fun TodoEditorPage(
|
||||||
onDismiss = { showExitConfirmDialog = false }
|
onDismiss = { showExitConfirmDialog = false }
|
||||||
)
|
)
|
||||||
|
|
||||||
WarningDialog(
|
ConfirmDialog(
|
||||||
visible = showDeleteConfirmDialog,
|
visible = showDeleteConfirmDialog,
|
||||||
icon = Icons.Outlined.Delete,
|
icon = Icons.Outlined.Delete,
|
||||||
description = stringResource(R.string.tip_delete_task, 1),
|
text = stringResource(R.string.tip_delete_task, 1),
|
||||||
onConfirm = onDelete,
|
onConfirm = onDelete,
|
||||||
onDismiss = { showDeleteConfirmDialog = false }
|
onDismiss = { showDeleteConfirmDialog = false }
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -38,7 +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.AnimatedExtendedFloatingActionButton
|
import cn.super12138.todo.ui.components.AnimatedExtendedFloatingActionButton
|
||||||
import cn.super12138.todo.ui.components.WarningDialog
|
import cn.super12138.todo.ui.components.ConfirmDialog
|
||||||
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
|
||||||
|
|
||||||
|
|
@ -220,10 +220,10 @@ fun MainPage(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WarningDialog(
|
ConfirmDialog(
|
||||||
visible = showDeleteConfirmDialog,
|
visible = showDeleteConfirmDialog,
|
||||||
icon = Icons.Outlined.Delete,
|
icon = Icons.Outlined.Delete,
|
||||||
description = stringResource(R.string.tip_delete_task, selectedTodoIds.size),
|
text = stringResource(R.string.tip_delete_task, selectedTodoIds.size),
|
||||||
onConfirm = { viewModel.deleteSelectedTodo() },
|
onConfirm = { viewModel.deleteSelectedTodo() },
|
||||||
onDismiss = { showDeleteConfirmDialog = false }
|
onDismiss = { showDeleteConfirmDialog = false }
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -139,7 +139,6 @@ fun SettingsData(
|
||||||
icon = Icons.Outlined.RestartAlt,
|
icon = Icons.Outlined.RestartAlt,
|
||||||
title = stringResource(R.string.tip_tips),
|
title = stringResource(R.string.tip_tips),
|
||||||
text = stringResource(R.string.tip_restore_success),
|
text = stringResource(R.string.tip_restore_success),
|
||||||
confirmButton = stringResource(R.string.action_confirm),
|
|
||||||
onConfirm = { restartApp(context) },
|
onConfirm = { restartApp(context) },
|
||||||
onDismiss = { showRestoreDialog = false },
|
onDismiss = { showRestoreDialog = false },
|
||||||
properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false)
|
properties = DialogProperties(dismissOnBackPress = false, dismissOnClickOutside = false)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue