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);
}