diff --git a/src/BootstrapBlazor/Services/DefaultThemeProvider.cs b/src/BootstrapBlazor/Services/DefaultThemeProvider.cs index 397a7b4800a..18007dbc13d 100644 --- a/src/BootstrapBlazor/Services/DefaultThemeProvider.cs +++ b/src/BootstrapBlazor/Services/DefaultThemeProvider.cs @@ -20,11 +20,6 @@ public async ValueTask SetThemeAsync(string themeName) { var module = await jsRuntime.LoadUtility(); await module.SetThemeAsync(themeName); - - if (ThemeChangedAsync is not null) - { - await ThemeChangedAsync(themeName); - } } /// @@ -35,4 +30,12 @@ public async ValueTask SetThemeAsync(string themeName) var module = await jsRuntime.LoadUtility(); return await module.GetThemeAsync(); } + + /// + /// + /// + public void TriggerThemeChanged(string themeName) + { + ThemeChangedAsync?.Invoke(themeName); + } } diff --git a/src/BootstrapBlazor/Services/IThemeProvider.cs b/src/BootstrapBlazor/Services/IThemeProvider.cs index 070c9040cdb..2592815770b 100644 --- a/src/BootstrapBlazor/Services/IThemeProvider.cs +++ b/src/BootstrapBlazor/Services/IThemeProvider.cs @@ -27,4 +27,10 @@ public interface IThemeProvider /// The callback when theme changed /// Func? ThemeChangedAsync { get; set; } + + /// + /// Trigger the theme changed event + /// + /// The name of the theme to set. + void TriggerThemeChanged(string themeName); } diff --git a/test/UnitTest/Services/ThemeProviderTest.cs b/test/UnitTest/Services/ThemeProviderTest.cs index 0f09ed404db..98201c1b6bf 100644 --- a/test/UnitTest/Services/ThemeProviderTest.cs +++ b/test/UnitTest/Services/ThemeProviderTest.cs @@ -12,12 +12,15 @@ public async Task SetTheme_Ok() { var themeName = ""; var themeProviderService = Context.Services.GetRequiredService(); + themeProviderService.TriggerThemeChanged("light"); + themeProviderService.ThemeChangedAsync = async theme => { themeName = theme; await Task.CompletedTask; }; await themeProviderService.SetThemeAsync("light"); + themeProviderService.TriggerThemeChanged("light"); Assert.Equal("light", themeName); }