diff --git a/app.js b/app.js index 3afbaeb..7f28c48 100644 --- a/app.js +++ b/app.js @@ -5,6 +5,10 @@ const darkMod = require('./utils/darkMode') App({ async onLaunch() { + // 尽早设导航栏色 + 窗口背景:原生导航栏在 JS 执行前用 app.json 写死的 + // 橙色,这里在 onLaunch 第一时间切到用户主题色,缩小冷启动跳变窗口。 + themeMod.applyChrome() + // Init dark mode listener (refreshes all open pages when system theme changes) darkMod.watchDarkMode((isDark) => { const pages = getCurrentPages() @@ -39,9 +43,6 @@ App({ this.globalData.theme = themeMod.getCurrentTheme() - // 窗口背景色 — 冷启动就设好,避免暗黑模式下切 tab 闪白 - themeMod.applyWindowBg() - // Sync with cloud: always locate our doc first (pullAll caches // _openid / _docId), then either restore or push. The previous flow // only pulled when local was empty, so on a cold start with non-empty diff --git a/utils/theme.js b/utils/theme.js index 9e991a6..b10d87c 100644 --- a/utils/theme.js +++ b/utils/theme.js @@ -130,11 +130,25 @@ const applyWindowBg = () => { } catch (e) {} } +/** + * 冷启动尽早调用:设导航栏色 + 窗口背景。 + * 原生导航栏在 JS 执行前用 app.json 写死的橙色,这里在 onLaunch 第一时间 + * 切到用户主题色,把冷启动橙->主题色的跳变窗口压到最小(无法完全消除, + * 因为 app.json 静态值在 onLaunch 之前就已应用)。 + */ +const applyChrome = () => { + try { + _setNavBarColor(getCurrentTheme().primary) + applyWindowBg() + } catch (e) {} +} + module.exports = { THEMES, DEFAULT_THEME_ID, BASE_VARS, applyWindowBg, + applyChrome, getThemeById, getCurrentTheme, setTheme,