В моем приложении есть экран, который я использую для изменения темы. Есть три варианта, названных так же, как светлая тема, темная тема и система. При нажатии на эти параметры меняется тема приложения, но цвет значков не меняется. Однако у меня есть два типа рисуемых файлов: темные и светлые, мои коды следующие:
Экран темы
val isSystemDarkTheme = isSystemInDarkTheme() Столбец( модификатор = Модификатор.fillMaxSize(), HorizontalAlignment = Alignment.CenterHorizontally ) { SelectableTitleWithIcon( title = stringResource(id = R.string.karanlik), mustShowImage = state.selectedThemeType == ThemeType.DarkTheme, onClick = { onChangeThemeType(ТемеТип.DarkTheme) saveThemeChoose(ThemeType.DarkTheme) сохранитьDarkTheme (правда) }) CustomDivider(startPadding = 15.dp, endPadding = 15.dp) SelectableTitleWithIcon( title = stringResource(id = R.string.aydinlik), mustShowImage = state.selectedThemeType == ThemeType.LightTheme, onClick = { onChangeThemeType(ТемаТип.LightTheme) saveThemeChoose(ТемаТип.LightTheme) сохранитьDarkTheme (ложь) }) CustomDivider(startPadding = 15.dp, endPadding = 15.dp) SelectableTitleWithIcon( title = stringResource(id = R.string.sistem_ile_ayni), mustShowImage = state.selectedThemeType == ThemeType.SystemTheme, onClick = { onChangeThemeType(ТемаТип.Системная тема) saveThemeChoose (ТипТемы.СистемнаяТема) если (isSystemDarkTheme) saveDarkTheme (истина), иначе saveDarkTheme (ложь) }) CustomDivider(startPadding = 15.dp, endPadding = 15.dp) } } ThemeScreenViewModel
@HiltViewModel класс ThemeViewModel @Inject конструктор( частный вал dataStoreUtil: DataStoreUtil, частный вал dataStoreHelper: PreferenceDataStoreHelper ) : ViewModel() { частный val _state = MutableStateFlow(ThemeScreenState()) состояние val: StateFlow = _state.asStateFlow() весело onChangeThemeType (themeType: ThemeType) { _state.update { это.копия( selectedThemeType = тип темы ) } } весело saveThemeChoose (themeType: ThemeType) { viewModelScope.launch { dataStoreHelper.putPreference(PreferenceDataStoreConstants.THEME_CHOOSE, themeType.name) } } весело saveDarkTheme(isDarkTheme: Boolean) { viewModelScope.launch { dataStoreUtil.saveTheme(isDarkTheme) } } } запечатанный класс ThemeType (имя значения: String) { объект DarkTheme: ThemeType("dark_theme") объект LightTheme : ThemeType("light_theme") объект SystemTheme : ThemeType("system_theme") объект по умолчанию: ThemeType («по умолчанию») сопутствующий объект { fun fromName(name: String): ThemeType { вернуться, когда (имя) { DarkTheme.name -> DarkTheme LightTheme.name -> LightTheme SystemTheme.name -> Системная тема Имя по умолчанию -> По умолчанию еще -> Системная тема } } } } класс данных ThemeScreenState( val selectedThemeType: ThemeType = ThemeType.Default ) MainActivity
@AndroidEntryPoint класс MainActivity : ComponentActivity() { частный lateinit var dataStoreUtil: DataStoreUtil переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) dataStoreUtil = DataStoreUtil (контекст приложения) val systemTheme = когда (resources.configuration.uiMode и Configuration.UI_MODE_NIGHT_MASK) { Configuration.UI_MODE_NIGHT_YES -> { true } Configuration.UI_MODE_NIGHT_NO -> { false } еще -> {ложь} } setContent { val theme = dataStoreUtil.getTheme(systemTheme).collectAsState(начальный = systemTheme) println("тема->"+theme.value) AppTheme(darkTheme = theme.value) { ... Тема приложения
private val DarkColors = darkColors( фон = md_theme_dark_background, поверхность = md_theme_dark_surface, первичный = md_theme_dark_primary, PrimaryVariant = md_theme_dark_primary_variant, onPrimary = md_theme_dark_onPrimaryContainer, вторичный = md_theme_dark_primary, onSecondary = md_theme_dark_onPrimaryContainer, вторичныйВариант = md_theme_dark_вторичныйКонтейнер, ) частный val LightColors = LightColors( фон = md_theme_light_background, поверхность = md_theme_light_surface, первичный = md_theme_light_primary, PrimaryVariant = md_theme_light_primary_variant, onPrimary = md_theme_light_onPrimaryContainer, вторичный = md_theme_light_primary, onSecondary = md_theme_light_onPrimaryContainer, вторичный вариант = md_theme_light_primary_variant, ) @Композитный забавная тема приложения( darkTheme: Boolean = isSystemInDarkTheme(), DynamicColor: Boolean = true, содержимое: @Composable () -> Единица измерения ) { val цвета = if (darkTheme) DarkColors else LightColors МатериалТема( цвета = цвета, типография = MontSerratTypography(цвета), контент = контент, ) }

послушайте скриншот
темный режим

светлый режим

theme.value записывает правильно в logcat, когда я меняю тему в ThemeScreen, например, я выбираю DarkTheme, она печатает true, или когда я выбираю светлую тему, она печатает false. Я также добавил ночные значки и значки света, как вы можете видеть ниже. Несмотря на то, что я сделал все, что у меня не получилось. Пожалуйста, помогите мне решить эту проблему.