protected virtual async Task ProcessNavigationForRootPage(string nextSegment, Queue<string> segments, NavigationParameters parameters, bool? useModalNavigation, bool animated) { var nextPage = CreatePageFromSegment(nextSegment); await ProcessNavigation(nextPage, segments, parameters, useModalNavigation, animated); var currentPage = _applicationProvider.MainPage; var modalStack = currentPage?.Navigation.ModalStack.ToList(); await DoNavigateAction(GetCurrentPage(), nextSegment, nextPage, parameters, async () => { await DoPush(null, nextPage, useModalNavigation, animated); }); if (currentPage != null) { PageUtilities.DestroyWithModalStack(currentPage, modalStack); } }
public void DestroyWithModalStack() { var recorder = new PageNavigationEventRecorder(); var contentPage1 = new ContentPageMock(recorder); var viewModel1 = contentPage1.BindingContext; var contentPage2 = new ContentPageMock(recorder); var viewModel2 = contentPage2.BindingContext; var contentPage3 = new ContentPageMock(recorder); var viewModel3 = contentPage3.BindingContext; var modalStack = new List <Page> { contentPage2, contentPage3 }; PageUtilities.DestroyWithModalStack(contentPage1, modalStack); var record = recorder.TakeFirst(); Assert.Equal(contentPage3, record.Sender); Assert.Equal(PageNavigationEvent.Destroy, record.Event); record = recorder.TakeFirst(); Assert.Equal(viewModel3, record.Sender); Assert.Equal(PageNavigationEvent.Destroy, record.Event); record = recorder.TakeFirst(); Assert.Equal(contentPage2, record.Sender); Assert.Equal(PageNavigationEvent.Destroy, record.Event); record = recorder.TakeFirst(); Assert.Equal(viewModel2, record.Sender); Assert.Equal(PageNavigationEvent.Destroy, record.Event); record = recorder.TakeFirst(); Assert.Equal(contentPage1, record.Sender); Assert.Equal(PageNavigationEvent.Destroy, record.Event); record = recorder.TakeFirst(); Assert.Equal(viewModel1, record.Sender); Assert.Equal(PageNavigationEvent.Destroy, record.Event); Assert.True(recorder.IsEmpty); }