Переключение Светлой / Тёмной темы
В данный момент я создаю веб приложение с использованием Blazor Server. Недавно у меня появилась мысль создать тёмную тему и тут я столкнулся с некоторыми трудностями.
У меня есть Сервис ThemeService с продолжительностью жизни Scoped. Однако при переходе на какую либо страницу он создаётся снова, не успев загрузить состояние с хранилища сессии.
Следовательно мне необходимо обновить интерфейс после загрузки какого-либо элемента.
MainLayout в моём случае не подходит для отслеживания рендера так как статичен. Возможно ли создать какой-либо компонент который будет запускать метод внутри сервиса после перехода на какую-либо страницу?
P.S.
В моём случае интерфейс обновляется через изменения класса главного элемента через JS.
public async Task ForceUpdateTheme()
{
_logger.Log(LogLevel.Warning, $"Force Update Theme! Current {GetCurrentTheme()}");
await _jsRuntime.InvokeVoidAsync("changeTheme", "page", _isDarkTheme ? "page dark" : "page light");
}
Я пробовал перевести всё приложение в режим рендера на сервере через
<Routes @rendermode="InteractiveServer" />
но после этого приложение выдавало только Not found
Есть вариант вызывать OnAfterRenderAsync() в каждом компоненте, но я надеюсь его избежать.