Переключение Светлой / Тёмной темы

В данный момент я создаю веб приложение с использованием 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() в каждом компоненте, но я надеюсь его избежать.


Ответы (0 шт):