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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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
            });
        }