namespace SteUp.Shared.Core.Messages.System; /// /// Ponte fra il tasto indietro del dispositivo (host nativo) e la UI Blazor. /// Il form scheda si registra mentre è aperto così il back non manda l'app in /// background buttando via il lavoro non salvato: passa invece dallo stesso /// percorso del pulsante "Annulla", che propone il salvataggio come bozza. /// public class BackButtonService { private Func? _handler; /// Registra il gestore corrente. Ritorna l'azione di deregistrazione. public IDisposable Register(Func handler) { _handler = handler; return new Registration(this, handler); } /// /// Invocato dall'host nativo. Ritorna true se la UI Blazor ha preso in carico /// il tasto indietro: in quel caso l'host non deve fare altro. /// public bool TryHandleBackPressed() { var handler = _handler; if (handler is null) return false; // Fire-and-forget: il gestore rientra nel dispatcher Blazor da solo. _ = handler(); return true; } private sealed class Registration(BackButtonService owner, Func handler) : IDisposable { public void Dispose() { // Non azzerare se nel frattempo si è registrato qualcun altro. if (ReferenceEquals(owner._handler, handler)) owner._handler = null; } } }