diff --git a/Net.Maui.Extensions/ControlFlow/INavigationService.cs b/Net.Maui.Extensions/ControlFlow/INavigationService.cs index 5a780d9..6707ca4 100644 --- a/Net.Maui.Extensions/ControlFlow/INavigationService.cs +++ b/Net.Maui.Extensions/ControlFlow/INavigationService.cs @@ -12,5 +12,8 @@ public interface INavigationService void GoBack(); + void GoBackTo() + where TPageType : ContentPage; + void GoBackToRoot(); } diff --git a/Net.Maui.Extensions/ControlFlow/NavigationService.cs b/Net.Maui.Extensions/ControlFlow/NavigationService.cs index 8eac660..9da4e0d 100644 --- a/Net.Maui.Extensions/ControlFlow/NavigationService.cs +++ b/Net.Maui.Extensions/ControlFlow/NavigationService.cs @@ -53,6 +53,22 @@ internal sealed class NavigationService : INavigationService this.ShowCurrentPage(); } + public void GoBackTo() where TPageType : ContentPage + { + var scopedLogger = this.logger.CreateScopedLogger(); + scopedLogger.LogDebug($"Going back to {typeof(TPageType).Name}"); + while ( + this.navigationStack.Count > 1 && + this.navigationStack.TryPeek(out var context) && + context.Page is not TPageType) + { + this.navigationStack.Pop(); + context.Scope?.Dispose(); + } + + this.ShowCurrentPage(); + } + public TPageType GoTo(TViewModelType? viewModel = default) where TPageType : ContentPage, IPageViewModel where TViewModelType : class, INotifyPropertyChanged, new() diff --git a/Net.Maui.Extensions/Net.Maui.Extensions.csproj b/Net.Maui.Extensions/Net.Maui.Extensions.csproj index 8be877f..2073164 100644 --- a/Net.Maui.Extensions/Net.Maui.Extensions.csproj +++ b/Net.Maui.Extensions/Net.Maui.Extensions.csproj @@ -20,7 +20,7 @@ enable enable true - 0.2.11 + 0.2.12 Alexandru Macocian LICENSE true