diff --git a/pages/settings/settings.js b/pages/settings/settings.js index 6590502..c839580 100644 --- a/pages/settings/settings.js +++ b/pages/settings/settings.js @@ -39,6 +39,8 @@ Page({ if (tb) tb.setData({ selected: 2 }) } catch (e) {} themeMod.applyThemeToPage(this) + // sync highlighted theme in case it was changed elsewhere + this.setData({ currentThemeId: themeMod.getCurrentTheme().id }) }, onSelectTheme(e) { diff --git a/utils/theme.js b/utils/theme.js index 84d8a2a..0b2015a 100644 --- a/utils/theme.js +++ b/utils/theme.js @@ -50,8 +50,15 @@ let _navColorTimer = null const getThemeById = (id) => THEMES.find(t => t.id === id) || THEMES[0] const getCurrentTheme = () => { - const id = wx.getStorageSync(THEME_KEY) || DEFAULT_THEME_ID - return getThemeById(id) + let id = wx.getStorageSync(THEME_KEY) + if (!id) { + // fallback: try recovering from user_settings backup + try { + const s = wx.getStorageSync('user_settings') + if (s && s.themeId) id = s.themeId + } catch (e) {} + } + return getThemeById(id || DEFAULT_THEME_ID) } const _setNavBarColor = (primary) => { @@ -69,7 +76,17 @@ const _setNavBarColor = (primary) => { } const setTheme = (id) => { - wx.setStorageSync(THEME_KEY, id) + try { + wx.setStorageSync(THEME_KEY, id) + // redundant backup in user_settings + try { + const s = wx.getStorageSync('user_settings') || {} + s.themeId = id + wx.setStorageSync('user_settings', s) + } catch (e) {} + } catch (e) { + console.error('Failed to save theme:', e) + } const theme = getThemeById(id) _setNavBarColor(theme.primary) const app = getApp()