You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KMM应用Web端isSystemInDarkTheme()始终返回false求助

问题解答

这不是Bug,而是isSystemInDarkTheme()在Kotlin Multiplatform的Web端实现上存在限制——它并未对接浏览器的系统主题检测API,所以才会始终返回false。

Web端需要直接借助浏览器原生的媒体查询能力来判断系统深色模式,你可以通过以下方式实现:

  • 在Kotlin/JS代码中,直接调用浏览器的window.matchMedia() API:
    fun isSystemDarkMode(): Boolean {
        return js("window.matchMedia('(prefers-color-scheme: dark)').matches")
    }
    
  • 如果项目使用了Compose for Web,可改用Compose Web专属的isSystemInDarkTheme()方法:
    import androidx.compose.web.window.isSystemInDarkTheme
    
    // 在Composable函数内调用
    val isDark = isSystemInDarkTheme()
    

如果需要在KMM共享模块中统一处理全平台的主题判断,建议通过expect/actual机制封装逻辑:

  1. 在共享模块定义expect函数:
    expect fun isSystemDarkTheme(): Boolean
    
  2. 在Android/iOS等平台用原生的isSystemInDarkTheme()实现actual:
    // Android端示例
    actual fun isSystemDarkTheme(): Boolean {
        return androidx.compose.foundation.isSystemInDarkTheme()
    }
    
  3. 在Web端用浏览器API实现actual:
    // Web端示例
    actual fun isSystemDarkTheme(): Boolean {
        return js("window.matchMedia('(prefers-color-scheme: dark)').matches")
    }
    

这样就能在全平台统一调用同一个函数,同时适配Web端的主题检测逻辑。

内容的提问来源于stack exchange,提问作者Julian Egner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 15:04:50