50 lines
1.0 KiB
JavaScript
50 lines
1.0 KiB
JavaScript
/**
|
|
* 系统深色模式监听 — 提供初始值与变更回调
|
|
* 旧设备 wx.onThemeChange 失败时退化为只读一次
|
|
*/
|
|
|
|
const STORAGE_KEY = 'dark_mode_pref'
|
|
|
|
function _readSystemTheme() {
|
|
try {
|
|
const info = wx.getSystemInfoSync()
|
|
return info.theme === 'dark' ? true : false
|
|
} catch (e) {
|
|
return false
|
|
}
|
|
}
|
|
|
|
function getInitialDarkMode() {
|
|
const pref = wx.getStorageSync(STORAGE_KEY) || 'system'
|
|
if (pref === 'system') return _readSystemTheme()
|
|
return pref === 'dark'
|
|
}
|
|
|
|
function getPref() {
|
|
return wx.getStorageSync(STORAGE_KEY) || 'system'
|
|
}
|
|
|
|
function setPref(value) {
|
|
if (!['system', 'light', 'dark'].includes(value)) return
|
|
wx.setStorageSync(STORAGE_KEY, value)
|
|
}
|
|
|
|
function watchDarkMode(onChange) {
|
|
if (typeof wx.onThemeChange !== 'function') return
|
|
try {
|
|
wx.onThemeChange(({ theme }) => {
|
|
const pref = getPref()
|
|
if (pref === 'system') onChange(theme === 'dark')
|
|
})
|
|
} catch (e) {
|
|
// 旧设备不支持,忽略
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
getInitialDarkMode,
|
|
getPref,
|
|
setPref,
|
|
watchDarkMode
|
|
}
|