Я пытаюсь реализовать темную тему в приложении. В настоящее время мне говорят использовать native-base для реализации этого. Я могу успешно переключать темы, но для этого требуется перезагрузка приложения.
Моя логика смены темы находится на уровне приложения, поэтому
<StyleProvider style={ getTheme(this.state.theme === 'light' ? platform : darkplatform) }>
С темой, изменяемой в состоянии уровня модуля при повторном рендеринге, вот так
console.log(`darkTheme enabled? ${isDarkThemeEnabled}`);
if (isDarkThemeEnabled && this.state.theme === 'light') {
this.setState(() => ({
theme: 'dark',
}));
} else if (!isDarkThemeEnabled && this.state.theme === 'dark') {
this.setState(() => ({
theme: 'light',
}));
}
};
Я знаю, что это не идеальная логика, но в соответствии с журналами консоли, которые я поместил в метод рендеринга app.js, он перерисовывается, и тема включается и переключается в поставщике стилей. Остальные компоненты в приложении успешно реализуют собственную базу, они используют текущую тему, но переключаются только после обновления приложения. Я также позаботился о том, чтобы они все перерисовывали при изменении состояния, но тема осталась прежней
Обновление: НЕКОТОРЫЕ компоненты меняются на лету, но не все. Есть причина для этого? Это кажется случайным, некоторые из моих тегов представления меняются, но не все, даже не все из них в одном компоненте
Редактировать: я использую избыточность, все мои компоненты перерисовываются при изменении состояния, но, что любопытно, меняются только некоторые темы