Vaadin Flow 应用程序自动在明暗模式之间切换

Vaadin Flow app switch between light and dark modes automatically

Vaadin Flow 14 随附其两个捆绑主题 LumoMaterial.[= 的浅色和深色版本。 12=]

现在

有没有办法让 Vaadin 应用根据用户的意愿自动使用浅色或深色主题变体?

Marcus Hellberg 以编程方式编写了 a helpful post on how to switch light/dark mode 主题变体。我想知道既然可以从浏览器中检测到用户偏好,Vaadin 14 是否能够自动切换。

如果没有,也许有人可以显示 Java 从服务器端 Java 代码查询用户偏好的代码。

您可以使用 window.matchMedia API to listen for changes to the prefers-color-scheme media query standardized in Media Queries Level 5. See CanIUse.com 以获得浏览器支持。

配色方案偏好的 CSS media feature 有 3 个可能的值:no-preferencelightdark。下面的代码在 dark 上查找匹配项。

  1. 将下面显示的JavaScript代码放入/frontend/prefers-color-scheme.js
  2. 在您的主视图中,添加注释 @JsModule("prefers-color-scheme.js")
let mm = window.matchMedia('(prefers-color-scheme: dark)');
function apply() {
    document.documentElement.setAttribute("theme",mm.matches?"dark":"");
}
mm.addListener(apply);
apply();

来源:https://gist.github.com/emarc/690eb2659c8b51cb895716914d65ec19