Skip to content

Commit

Permalink
Merge pull request #3055 from PrismLibrary/dev/ds/maui-modals
Browse files Browse the repository at this point in the history
Fixes issue pushing modals
  • Loading branch information
dansiegel committed Jan 20, 2024
2 parents f0f43df + bab1864 commit 0790176
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 5 deletions.
8 changes: 3 additions & 5 deletions src/Maui/Prism.Maui/Navigation/PageNavigationService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -405,9 +405,8 @@ protected virtual async Task ProcessNavigation(Page currentPage, Queue<string> s

var pageParameters = UriParsingHelper.GetSegmentParameters(nextSegment);

useModalNavigation = pageParameters.ContainsKey(KnownNavigationParameters.UseModalNavigation) ? pageParameters.GetValue<bool>(KnownNavigationParameters.UseModalNavigation) : false;
if (!useModalNavigation.Value && !MvvmHelpers.HasNavigationPageParent(currentPage) && (currentPage is not FlyoutPage || (currentPage.Parent is FlyoutPage parentFlyout && parentFlyout.Flyout == currentPage)))
useModalNavigation = true;
if (pageParameters.TryGetValue<bool>(KnownNavigationParameters.UseModalNavigation, out var parameterModal))
useModalNavigation = parameterModal;

bool? pageAnimation = animated;
if (animated is null && pageParameters.TryGetValue<bool>(KnownNavigationParameters.Animated, out var parameterAnimation))
Expand Down Expand Up @@ -1163,8 +1162,7 @@ protected virtual Page GetCurrentPage()

internal static bool UseModalNavigation(Page currentPage, bool? useModalNavigationDefault)
{
bool useModalNavigation = true;

bool useModalNavigation;
if (useModalNavigationDefault.HasValue)
useModalNavigation = useModalNavigationDefault.Value;
else if (currentPage is NavigationPage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,37 @@ public async Task Navigation_Animation_IsFalse()
Assert.False(push.Animated);
}

[Theory]
[InlineData("MockViewA", "MockViewB", null)]
[InlineData("NavigationPage/MockViewA", "MockViewB?useModalNavigation=true", true)]
public async Task PushesModally(string startUri, string requestUri, bool? expectedUseModal)
{
var mauiApp = CreateBuilder(prism => prism
.CreateWindow(n => n.NavigateAsync(startUri)))
.Build();
var window = GetWindow(mauiApp);
var page = window.Page;
if (page is NavigationPage navPage)
page = navPage.RootPage;

var navService = Prism.Navigation.Xaml.Navigation.GetNavigationService(page);

var result = await navService.NavigateAsync(requestUri);
Assert.True(result.Success);

var pushes = navService.GetPushes();
Assert.Single(pushes);
var push = pushes[0];

var parameters = UriParsingHelper.GetSegmentParameters(requestUri);
bool? useModalNavigation = null;
if (parameters.TryGetValue<bool>(KnownNavigationParameters.UseModalNavigation, out var parameterModal))
useModalNavigation = parameterModal;

Assert.Equal(expectedUseModal, push.UseModalNavigation);
Assert.True(PageNavigationService.UseModalNavigation(push.CurrentPage, useModalNavigation));
}

private static void TestPage(Page page)
{
Assert.NotNull(page.BindingContext);
Expand Down

0 comments on commit 0790176

Please sign in to comment.