Usar páginas com guias com páginas na pilha de navegação

Concluído

Submenu e navegação com guias são apenas duas maneiras de permitir que um usuário navegue pelos dados apresentados por um aplicativo. Outra técnica é usar a navegação por pilha. Cada tipo de navegação é adequado para diferentes tipos de relações entre páginas.

Você pode usar a navegação de pilha em combinação com submenus e guias. Nesta unidade, analisamos brevemente as diferenças entre a navegação por tabulação e submenu e a navegação por pilha e, em seguida, aprendemos como criar aplicativos que combinam ambas as técnicas.

Revisão de submenus e navegação de guias

Submenus e navegação por guias fornecem um mecanismo útil para permitir que o usuário selecione qual página visualizar a qualquer momento. O usuário navega para uma página simplesmente selecionando a guia apropriada ou o item de submenu. Esta forma de navegação é útil para itens de dados que têm uma relação de pares entre si. No aplicativo de astronomia, as páginas Sol, Lua e Sobre são todos pares; não há relação direta entre eles.

No entanto, para dados hierárquicos, a navegação por pilha pode ser mais apropriada. A navegação por pilha permite que o usuário faça uma busca detalhada em uma série de páginas, onde a próxima página na pilha fornece uma visão mais detalhada de um item selecionado na página anterior.

Considere o seguinte cenário:

Você adiciona uma nova página ao aplicativo de astronomia que exibe corpos astronômicos. Você quer que o usuário toque em um desses objetos celestes e, em seguida, exiba informações sobre ele. A página listando os corpos astronômicos seria melhor apresentada em uma página de guia como um irmão da fase da lua e páginas do nascer do sol. As informações detalhadas sobre o corpo astronômico são melhor apresentadas como uma série de etapas usando a navegação por pilha. Este mecanismo também permite que o usuário retorne à página principal de corpos astronômicos tocando em um botão Voltar.

O Shell .NET Multi-platform App UI (MAUI) inclui uma experiência de navegação baseada em URI que usa rotas para navegar para qualquer página no aplicativo, sem precisar seguir uma hierarquia de navegação definida. Além disso, ele permite que você navegue para trás sem ter que visitar todas as páginas na pilha de navegação.

A classe Shell define as seguintes propriedades relacionadas à navegação:

  • BackButtonBehavior, do tipo BackButtonBehavior, uma propriedade anexada que define o comportamento do botão Voltar.
  • CurrentItem, do tipo ShellItem, o item selecionado no momento.
  • CurrentPage, do tipo Page, a página atualmente apresentada.
  • CurrentState, do tipo ShellNavigationState, o estado de navegação atual do Shell.
  • Current, do tipo Shell, um alias fundido para Application.Current.MainPage.

A navegação é realizada invocando o GoToAsync método, a Shell partir da classe.

Rotas

A navegação é executada em um aplicativo Shell especificando um URI para o qual navegar. Os URIs de navegação podem ter três componentes:

  • Uma rota, que define o caminho para o conteúdo que existe como parte da hierarquia visual do Shell.
  • Uma página. As páginas que não existem na hierarquia visual do Shell podem ser enviadas para a pilha de navegação de qualquer lugar dentro de um aplicativo Shell. Por exemplo, uma página de detalhes não é definida na hierarquia visual do Shell, mas pode ser empurrada para a pilha de navegação conforme necessário.
  • Um ou mais parâmetros de consulta. Os parâmetros de consulta são parâmetros que podem ser passados para a página de destino durante a navegação.

Quando um URI de navegação inclui os três componentes, a estrutura é: //route/page?queryParameters

Registar rotas

As rotas podem ser definidas em FlyoutItem, TabBar, Tabe ShellContent objetos através de suas Route propriedades:

<Shell ...>
    <FlyoutItem ... 
        Route = "astronomy">
        <ShellContent ...
            Route="moonphase" />
        <ShellContent ...
            Route="sunrise" />
    </FlyoutItem>
    <FlyoutItem>
        <ShellContent ...
            Route="about" />
    </FlyoutItem>
</Shell>

Para navegar até a moonphase rota, o URI de rota absoluta é //astronomy/moonphase

Registar rotas detalhadas

No construtor de Shell subclasse ou em qualquer outro local executado antes de uma rota ser invocada, você pode registrar explicitamente uma rota usando o Routing.RegisterRoute método para quaisquer páginas de detalhes que não estejam representadas na hierarquia visual do Shell.

Routing.RegisterRoute("astronomicalbodydetails", typeof(AstronomicalBodyPage));

Para navegar até o AstronomicalBodyPage, pode-se então invocar:

await Shell.Current.GoToAsync("astronomicalbodydetails");`

Navegação para trás

A navegação para trás pode ser executada especificando ".." como o argumento para o GoToAsync método:

await Shell.Current.GoToAsync("..");

Transmissão de dados

Os dados primitivos podem ser passados como parâmetros de consulta baseados em cadeia de caracteres ao executar a navegação programática baseada em URI. Passe os dados anexando após uma rota, seguida por uma ID =de ? parâmetro de consulta e um valor:

string celestialName = "moon";

await Shell.Current.GoToAsync($"astronomicalbodydetails?bodyName={celestialName}");

Neste exemplo, a rota é astronomicalbodydetails, o parâmetro é bodyName e o valor é da variável celestialName.

Recuperando dados

Os dados de navegação podem ser recebidos decorando a classe recetora com um QueryPropertyAttribute para cada parâmetro de consulta baseado em cadeia de caracteres e parâmetro de navegação baseado em objeto:

[QueryProperty(nameof(AstroName), "bodyName")]
public partial class AstronomicalBodyPage : ContentPage
{
    string astroName;
    public string AstroName
    {
        get => astroName;
        set
        {
            astroName = value;
        }
    }

    ...
}

Neste exemplo, o primeiro argumento para o QueryPropertyAttribute especifica o nome da propriedade que recebe os dados, com o segundo argumento especificando a ID do parâmetro.

Verifique o seu conhecimento

1.

Como você envia dados para uma página ao usar a navegação baseada em rota do .NET MAUI Shell?