@* Toast: Zeigt kurze Benachrichtigungen an. Ersetzt AlertifyJS aus dem Web-Projekt. Wird einmal im MainLayout platziert. Hört auf den ToastService. Wenn eine Komponente irgendwo _toast.ShowSuccess("Text") aufruft, erscheint hier ein Toast und verschwindet nach 4 Sekunden automatisch. Bootstrap Toast-Klassen werden genutzt: - toast-container: Positionierung (oben rechts) - toast: Einzelner Toast - bg-success/bg-danger/etc: Farbe basierend auf Typ *@ @inject ToastService ToastService @implements IDisposable @if (ToastService.Messages.Count > 0) { @* toast-container: Bootstrap-Klasse die Toasts oben rechts positioniert. position-fixed: Bleibt an der Stelle auch beim Scrollen. z-index 1080: Über dem Modal-Backdrop (1070) damit Toasts auch während eines ConfirmDialogs sichtbar sind. *@
@foreach (var message in ToastService.Messages) { }
} @code { protected override void OnInitialized() { // Subscriber: Wenn der ToastService eine Änderung meldet, // zeichnet diese Komponente sich neu (StateHasChanged). // So erscheinen/verschwinden Toasts automatisch. ToastService.OnChange += HandleChange; } /// /// InvokeAsync ist nötig weil OnChange von einem /// async void (dem Timer im ToastService) ausgelöst wird. /// Das kann auf einem anderen Thread passieren. /// InvokeAsync wechselt zurück auf den Blazor UI-Thread. /// private async void HandleChange() { await InvokeAsync(StateHasChanged); } /// /// Event-Handler abmelden wenn die Komponente entfernt wird. /// Ohne das würde der ToastService eine Referenz auf eine /// nicht mehr existierende Komponente halten → Memory Leak. /// public void Dispose() { ToastService.OnChange -= HandleChange; } }