Относительно легко переключаться между двумя разными вариантами одной и той же темы, например темным и светлым вариантами Lumo.Для этого вам нужно только переключить соответствующий атрибут theme
в элементе <html>
.Прямой доступ к этому элементу с сервера отсутствует, но вы можете сделать это с помощью небольшого фрагмента JavaScript: ui.getPage().executeJavaScript("document.documentElement.setAttribute($0, $1)", "theme", "dark");
В зависимости от обстоятельств вы можете или должны применить изменения к элементу <body>
вместо,В этом случае вы можете либо отключить .documentElement
для .body
во фрагменте JS, либо напрямую использовать ui.getElement().setAttribute("theme", "dark")
в Java.
Переключение между двумя различными базовыми темами, например, Lumo vs Material, является гораздо болеесложное дело.Для каждого компонента одновременно может быть загружена только одна базовая тема в браузере, и перезагрузка страницы - единственный способ избавиться от уже загруженной.Для каждого компонента, используемого для Flow, платформа заботится о загрузке правильного импорта темы в дополнение к базовому импорту, который не имеет стилей.Чтобы еще больше усложнить задачу, тема, обозначенная @Theme
, автоматически включается в рабочий пакет приложения.Чтобы иметь возможность использовать несколько базовых тем, вам также нужно как-то создать несколько разных комплектов, а также каким-то образом настроить Flow на использование правильного комплекта в зависимости от обстоятельств.