From a7311bfddf8c6838de1c8737752030e868ff9bd3 Mon Sep 17 00:00:00 2001 From: Super12138 <70494801+Super12138@users.noreply.github.com> Date: Sun, 9 Nov 2025 19:13:42 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E9=A2=9C?= =?UTF-8?q?=E8=89=B2=E6=A8=A1=E5=BC=8F=E5=92=8C=E4=B8=BB=E9=A2=98=E8=89=B2?= =?UTF-8?q?=E7=89=88=E7=9A=84=E6=80=A7=E8=83=BD=E4=B8=8E=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ui/pages/settings/SettingsAppearance.kt | 4 +- .../appearance/darkmode/DarkModePicker.kt | 50 ++++++++----------- .../appearance/palette/PaletteItem.kt | 5 +- .../appearance/palette/PalettePicker.kt | 40 +++++++-------- 4 files changed, 47 insertions(+), 52 deletions(-) diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAppearance.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAppearance.kt index 49eee2f..824291e 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAppearance.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/SettingsAppearance.kt @@ -63,12 +63,12 @@ fun SettingsAppearance( ) DarkModePicker( - currentDarkMode = DarkMode.fromId(darkMode), + currentDarkMode = { DarkMode.fromId(darkMode) }, onDarkModeChange = { scope.launch { DataStoreManager.setDarkMode(it.id) } } ) PalettePicker( - currentPalette = PaletteStyle.fromId(paletteStyle), + currentPalette = { PaletteStyle.fromId(paletteStyle) }, onPaletteChange = { scope.launch { DataStoreManager.setPaletteStyle(it.id) } }, isDynamicColor = dynamicColor, isDarkMode = DarkMode.fromId(darkMode), diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt index 1b3dd47..afaca2e 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/darkmode/DarkModePicker.kt @@ -2,7 +2,11 @@ package cn.super12138.todo.ui.pages.settings.components.appearance.darkmode import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext @@ -14,12 +18,15 @@ import cn.super12138.todo.ui.theme.DarkMode @Composable fun DarkModePicker( - currentDarkMode: DarkMode, + currentDarkMode: () -> DarkMode, onDarkModeChange: (darkMode: DarkMode) -> Unit, modifier: Modifier = Modifier ) { val context = LocalContext.current val isInDarkTheme = isSystemInDarkTheme() + + val darkModeList = remember { DarkMode.entries.toList() } + LazyRowSettingsItem( title = stringResource(R.string.pref_dark_mode), description = stringResource(R.string.pref_dark_mode_desc), @@ -27,37 +34,22 @@ fun DarkModePicker( fadedEdgeWidth = 8.dp, modifier = modifier ) { - item { - DarkModeItem( - icon = DarkMode.FollowSystem.icon, - name = DarkMode.FollowSystem.getDisplayName(context), - contentColor = if (isInDarkTheme) Color.White else Color.Black, - containerColor = if (isInDarkTheme) Color.Black else Color.White, - selected = currentDarkMode == DarkMode.FollowSystem, - onSelect = { onDarkModeChange(DarkMode.FollowSystem) } - ) - } + items(items = darkModeList, key = { it.id }) { + val (contentColor, containerColor) = when (it) { + DarkMode.FollowSystem -> if (isInDarkTheme) Color.White to Color.Black else Color.Black to Color.White + DarkMode.Light -> Color.Black to Color.White + DarkMode.Dark -> Color.White to Color.Black + } - item { - DarkModeItem( - icon = DarkMode.Light.icon, - name = DarkMode.Light.getDisplayName(context), - contentColor = Color.Black, - containerColor = Color.White, - selected = currentDarkMode == DarkMode.Light, - onSelect = { onDarkModeChange(DarkMode.Light) } - ) - } + val isSelected by remember { derivedStateOf { currentDarkMode() == it } } - item { DarkModeItem( - icon = DarkMode.Dark.icon, - name = DarkMode.Dark.getDisplayName(context), - contentColor = Color.White, - containerColor = Color.Black, - selected = currentDarkMode == DarkMode.Dark, - onSelect = { onDarkModeChange(DarkMode.Dark) } - ) + icon = it.icon, + name = it.getDisplayName(context), + contentColor = contentColor, + containerColor = containerColor, + selected = isSelected, + onSelect = { onDarkModeChange(it) }) } } } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PaletteItem.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PaletteItem.kt index c95c2ca..4e53edf 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PaletteItem.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PaletteItem.kt @@ -108,7 +108,10 @@ fun PaletteItem( Text( text = paletteStyle.getDisplayName(context), - style = MaterialTheme.typography.bodyMedium + style = MaterialTheme.typography.bodyMedium, + color = if (selected) { + MaterialTheme.colorScheme.primary + } else MaterialTheme.colorScheme.onSurface ) } } \ No newline at end of file diff --git a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt index d36ade5..9a0d5b8 100644 --- a/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt +++ b/app/src/main/kotlin/cn/super12138/todo/ui/pages/settings/components/appearance/palette/PalettePicker.kt @@ -2,7 +2,10 @@ package cn.super12138.todo.ui.pages.settings.components.appearance.palette import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.lazy.items import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource @@ -15,17 +18,14 @@ import cn.super12138.todo.ui.theme.PaletteStyle @Composable fun PalettePicker( - currentPalette: PaletteStyle, + currentPalette: () -> PaletteStyle, onPaletteChange: (paletteStyle: PaletteStyle) -> Unit, isDynamicColor: Boolean, isDarkMode: DarkMode, contrastLevel: ContrastLevel, modifier: Modifier = Modifier ) { - - val paletteOptions = remember { - PaletteStyle.entries.toList() - } + val paletteOptions = remember { PaletteStyle.entries.toList() } LazyRowSettingsItem( title = stringResource(R.string.pref_palette_style), @@ -34,21 +34,21 @@ fun PalettePicker( fadedEdgeWidth = 8.dp, modifier = modifier ) { - paletteOptions.forEach { paletteStyle -> - item { - PaletteItem( - isDynamicColor = isDynamicColor, - isDark = when (isDarkMode) { - DarkMode.FollowSystem -> isSystemInDarkTheme() - DarkMode.Light -> false - DarkMode.Dark -> true - }, - paletteStyle = paletteStyle, - selected = currentPalette == paletteStyle, - contrastLevel = contrastLevel, - onSelect = { onPaletteChange(paletteStyle) } - ) - } + items(items = paletteOptions, key = { it.id }) { + val isSelected by remember { derivedStateOf { currentPalette() == it } } + + PaletteItem( + isDynamicColor = isDynamicColor, + isDark = when (isDarkMode) { + DarkMode.FollowSystem -> isSystemInDarkTheme() + DarkMode.Light -> false + DarkMode.Dark -> true + }, + paletteStyle = it, + selected = isSelected, + contrastLevel = contrastLevel, + onSelect = { onPaletteChange(it) } + ) } } } \ No newline at end of file