收藏
回答

深色模式的切换导致小程序重载

框架类型 问题类型 操作系统版本 手机型号 微信版本
小程序 Bug Android 11(MIUI 12.5.2.0) Redmi 8.0.3

以下场景仅在两台手机(Android 10 + MIUI 12 和 Android 11 + MIUI 12.5)上测试过,其他机型不确定。

文档是都有提到深色模式的用法,但我觉得场景限定得太死。比如:

app.json[darkmode] = false 限制了小程序窗体颜色自动变换,onThemeChange的变换回调,getSystemInfo[theme]当前主题的返回。

app.json[darkmode] = true 则在手动切换或某些系统提供了定时切换主题模式后,会导致正在运行的小程序重载(重启),导致小程序的一些操作和数据丢失。

问题在现在的限制下,业务上是希望能适配主题的切换但又不想小程序重新加载,我想到的办法是WXSS使用媒体查询 prefers-color-scheme + onThemeChange中修改窗体颜色。问题是小程序不重载要求app.json[darkmode]为false,但这不会触发onThemeChange回调,getSystemInfo[theme]也没有返回。

我觉得onThemeChange和getSystemInfo可以不依赖darkmode的设置值。

此外,即使配置了darkmode为true,切换主题后因为小程序重载了,且onThemeChange不会触发?那这个功能真是鸡肋。

最后一次编辑于  2021-06-09
回答关注问题邀请回答
收藏

2 个回答

  • 微信小店技术专员-binnie
    微信小店技术专员-binnie
    2021-06-10

    ios 切换深色模式不会重新加载;安卓切换是对齐微信切换深色模式会重新加载;

    2021-06-10
    有用 1
    回复 1
    • 烧饼
      烧饼
      2021-06-11
      我这边测试,小程序在darkmode:false下,切换深色模式微信会重载,但小程序不会,此时业务、数据不受影响。所以能否把onThemeChange这个回调给独立出来,不受darkmode:true的配置影响?
      2021-06-11
      回复
  • 烧饼
    烧饼
    2021-07-08

    我估摸了个解决办法:给对应组件在@media (prefers-color-scheme: dark) 里修改颜色、添加transition过渡,同时给该组件添加bindtransitionend事件,就能在darkmode:false时监听主题的变换了,而且不会导致小程序重启

    2021-07-08
    有用
    回复
登录 后发表内容