I am trying to impliment a darkmode toggle in a blazor webassembly app. I inject the localstorage and it works on other pages that use local storage but when trying to impliment it on the main layout oninitalized method I get a null reference error on load.
public partial class MainLayout
{
[Inject]
protected ILocalStorageService localStorage { get; set; }
protected override async Task OnInitializedAsync()
{
_darkmode = false;
try
{
if (await localStorage.GetItemAsStringAsync("theme") == null) return;
var mode = await localStorage.GetItemAsync<string>("theme");
if (!string.IsNullOrEmpty(mode))
_darkmode = mode == "darkmode" ? true : false;
Themer.SetTheme(_darkmode);
StateHasChanged();
}
catch (Exception ex)
{
_darkmode = false;
}
}
}
This is the error I get as soon as I have anything to do with the local storage in the main layout.
crit: Microsoft.AspNetCore.Components.WebAssembly.Rendering.WebAssemblyRenderer[100] Unhandled exception rendering component: Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object. at SeekaPortal.Client.Shared.MainLayout.BuildRenderTree(RenderTreeBuilder __builder) at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment) at Microsoft.AspNetCore.Components.RenderTree.Renderer.RenderInExistingBatch(RenderQueueEntry renderQueueEntry) at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()