Andrey Yegorov
02/11/2025, 4:56 PM<meta name="theme-color" content="#FFFBFF" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#201A1B" media="(prefers-color-scheme: dark)">
and:
@OptIn(ExperimentalComposeUiApi::class)
fun main() {
ComposeViewport(document.body!!) {
SystemTheme()
App()
}
}
@Composable
fun SystemTheme() {
DisposableEffect(Unit) {
val mediaQueryList = window.matchMedia("(prefers-color-scheme: dark)")
fun updateThemeColor() {
val metaTag = document.querySelector("meta[name='theme-color']") as? HTMLMetaElement
metaTag?.content = if (mediaQueryList.matches) "#201A1B" else "#FFFBFF"
}
updateThemeColor()
val listener: (Event) -> Unit = { updateThemeColor() }
mediaQueryList.addEventListener("change", listener)
onDispose {
mediaQueryList.removeEventListener("change", listener)
}
}
}
ChatGPT says that maybe wasm kmp app overrides it somewhere?Skaldebane
02/15/2025, 10:34 PMSkaldebane
02/15/2025, 10:39 PMSkaldebane
02/15/2025, 10:40 PMMaterialTheme.colors.isLight
or similar)Skaldebane
02/15/2025, 10:43 PMsetAttribute
on the HTMLMetaElement instead of reassigning `content`:
// replace #000000 with whatever color value you want
metaTag?.setAttribute("content", "#000000")
Andrey Yegorov
02/16/2025, 12:46 PMSkaldebane
02/16/2025, 1:10 PMMaterialTheme.colors.isLight
to check it, make sure to do that after defining your theme (e.g. if you set the theme in App
, then you should call your SystemTheme()
function under MaterialTheme
or whatever theme wrapper you have), otherwise it's always going to return true.