public async Task NavigationBetweenFlyoutItemsRetainsQueryString() { var testPage1 = new ShellTestPage(); var testPage2 = new ShellTestPage(); var flyoutItem1 = CreateShellItem <FlyoutItem>(testPage1, shellItemRoute: "flyoutItem1"); var flyoutItem2 = CreateShellItem <FlyoutItem>(testPage2, shellItemRoute: "flyoutItem2"); var shell = new TestShell(flyoutItem1, flyoutItem2); var complexParameter = new object(); IShellController shellController = shell; await shell.GoToAsync(new ShellNavigationState($"//flyoutItem2?{nameof(ShellTestPage.SomeQueryParameter)}=1234"), false, new Dictionary <string, object>() { { nameof(ShellTestPage.ComplexObject), complexParameter } }); Assert.AreEqual("1234", testPage2.SomeQueryParameter); Assert.AreEqual(complexParameter, testPage2.ComplexObject); await shellController.OnFlyoutItemSelectedAsync(flyoutItem1); await shellController.OnFlyoutItemSelectedAsync(flyoutItem2); Assert.AreEqual("1234", testPage2.SomeQueryParameter); Assert.AreEqual(complexParameter, testPage2.ComplexObject); }
public async Task FlyoutNavigateToImplicitContentPage() { var shell = new Shell(); var shellITem = new ShellItem() { FlyoutDisplayOptions = FlyoutDisplayOptions.AsMultipleItems, }; var shellSection = new ShellSection() { Title = "can navigate to" }; shellSection.Items.Add(new ContentPage()); var shellSection2 = new ShellSection() { Title = "can navigate to" }; shellSection2.Items.Add(new ContentPage()); var implicitSection = CreateShellSection(new ContentPage(), asImplicit: true); shellITem.Items.Add(shellSection); shellITem.Items.Add(shellSection2); shellITem.Items.Add(implicitSection); shell.Items.Add(shellITem); IShellController shellController = (IShellController)shell; await shellController.OnFlyoutItemSelectedAsync(shellSection2); Assert.AreEqual(shellSection2, shell.CurrentItem.CurrentItem); await shellController.OnFlyoutItemSelectedAsync(shellSection); Assert.AreEqual(shellSection, shell.CurrentItem.CurrentItem); await shellController.OnFlyoutItemSelectedAsync(implicitSection); Assert.AreEqual(implicitSection, shell.CurrentItem.CurrentItem); }
public async Task NavigatedFiresAfterSwitchingFlyoutItemsBothWithPushedPages() { var shellContent1 = new ShellContent() { Content = new ContentPage() }; var shellContent2 = new ShellContent() { Content = new ContentPage() }; var shell = new TestShell(shellContent1, shellContent2); IShellController shellController = shell; await shell.Navigation.PushAsync(new ContentPage()); await shellController.OnFlyoutItemSelectedAsync(shellContent2); await shell.Navigation.PushAsync(new ContentPage()); await shellController.OnFlyoutItemSelectedAsync(shellContent1); Assert.AreEqual(2, shell.Items[0].Items[0].Navigation.NavigationStack.Count); Assert.AreEqual(2, shell.Items[1].Items[0].Navigation.NavigationStack.Count); }
public async Task NavigationBetweenFlyoutItemWithPushedPageRetainsQueryString() { var testPage1 = new ShellTestPage(); var testPage2 = new ShellTestPage(); var flyoutItem1 = CreateShellItem <FlyoutItem>(testPage1, shellItemRoute: "flyoutItem1"); var flyoutItem2 = CreateShellItem <FlyoutItem>(testPage2, shellItemRoute: "flyoutItem2"); Routing.RegisterRoute("details", typeof(ShellTestPage)); var shell = new TestShell(flyoutItem1, flyoutItem2); IShellController shellController = shell; await shell.GoToAsync(new ShellNavigationState($"//flyoutItem2/details?{nameof(ShellTestPage.SomeQueryParameter)}=1234")); await shellController.OnFlyoutItemSelectedAsync(flyoutItem1); await shellController.OnFlyoutItemSelectedAsync(flyoutItem2); var testPage = (shell.CurrentItem.CurrentItem as IShellSectionController).PresentedPage as ShellTestPage; Assert.AreEqual("1234", testPage.SomeQueryParameter); }
public async Task NavigatedFiresAfterSwitchingFlyoutItems() { SetupBuilder(); var shellContent1 = new ShellContent() { Content = new ContentPage() }; var shellContent2 = new ShellContent() { Content = new ContentPage() }; var shell = await CreateShellAsync((shell) => { shell.Items.Add(shellContent1); shell.Items.Add(shellContent2); }); await CreateHandlerAndAddToWindow <ShellHandler>(shell, async (handler) => { IShellController shellController = shell; var currentItem = shell.CurrentItem; // For now on iOS/Android we're just making sure nothing crashes #if WINDOWS Assert.NotNull(currentItem.Handler); #endif await shellController.OnFlyoutItemSelectedAsync(shellContent2); await shell.Navigation.PushAsync(new ContentPage()); await shell.GoToAsync(".."); #if WINDOWS Assert.NotNull(shell.Handler); Assert.NotNull(shell.CurrentItem.Handler); Assert.NotNull(shell.CurrentItem.CurrentItem.Handler); Assert.Null(currentItem.Handler); Assert.Null(currentItem.CurrentItem.Handler); #endif }); }