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.