refactor: 优化颜色模式和主题色版的性能与样式
This commit is contained in:
parent
84c49542c0
commit
a7311bfddf
4 changed files with 47 additions and 52 deletions
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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) })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -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) }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue