
Controle NavigationDrawer
O controle NavigationDrawer é um componente no estilo Material Design que desenha um painel similar ao NavigationBar mas que desliza horizontalmente da borda, da esquerda para a direita ou o inverso. Ela serve para apresentar destinos primários em um aplicativo. Uma NavigationDrawer é adicionada e removida da página com as propriedades page.drawer e page.end_drawer. Um controle NavigationDrawer pode ser adicionado a uma View, usando as propriedades View.drawer ou View.end_drawer.
Nesse texto chamaremos a drawer (literalmente, gaveta) de aba. Portanto o controle de navegação contem diversos controles de destinos que são abas.
Propriedades do NavigationDrawer
| Propriedade | Descrição | 
|---|---|
| bgcolor | cor de fundo do controle. | 
| controls | lista de itens de menu que são os filhos do NavigationDrawer. Esses filhos são controles NavigationDrawerDestination ou alguns outros, como títulos e divisores. | 
| elevation | elevação do controle. | 
| indicator_color | cor do indicador de destino selecionado. | 
| indicador_shape | forma do indicador de destino selecionado. O valor é do tipo OutlinedBorder. | 
| position | posição dessa aba. O valor é do tipo NavigationDrawerPosition com default NavigationDrawerPosition.START. | 
| selected_index | índice do NavigationDrawerDestination selecionado, ou nulo se nenhuma seleção foi feita.Se esse número for inválido (como -1), nenhum destino será selecionado. | 
| shadow_color | cor da sombra usada para indicar elevação. | 
| surface_tint_color | tom de cor da superfície (Material) que abriga o conteúdo do NavigationDrawer. | 
| tile_padding | preenchimento para controles NavigationDrawerDestination. | 

Eventos do NavigationDrawer
| Evento | Descrição | 
|---|---|
| on_change | dispara na seleção de um destino. | 
| on_dismiss | dispara quando a aba é descartada por ação de alhum outro controle ou clique fora da aba. | 
Uma NavigationDrawer recebe outros controles em sua propriedade NavigationDrawer.controls, que é um array. Em particular vários controles NavigationDrawerDestination podem ser inseridos, contendo ícones e labels. A seleção dos destinos é realizada no evento NavigationDrawer.on_change e a captura do índice do controlel clicado. Um evento também é disparado no fechamento da aba, com NavigationDrawer.on_change.
Propriedades de NavigationDrawerDestination
| Propriedade | Descrição | 
|---|---|
| bgcolor | cor do controle de destino. | 
| icon | ícone do destino. | 
| icon_content | controle dentro do ícone de destino. Geralmente é um controle Icon e é usado no lugar da propriedade icon. Se um selected_icon_content for fornecido ele só será exibido se o destino não for selecionado†. | 
| label | rótulo de texto abaixo do ícone deste NavigationDrawerDestination. | 
| selected_icon | ícone alternativo exibido quando o destino é selecionado. | 
| selected_icon_content | controle de ícone alternativo exibido quando o destino é selecionado. Se este ícone não for fornecido, o NavigationDrawer exibe icon_content em qualquer estado. | 
† Nota: O manual do Flet sugere a escolha de um ícone com uma versão com traço e preenchida, como icons.CLOUD e icons.CLOUD_QUEUE, para tornar o NavigationDrawer mais acessível. O ícone deve ser definido para a versão com traço e selected_icon para a versão preenchida.

Exemplo de Uso do NavigationDrawer
import flet as ft
def main(page: ft.Page):
    page.bgcolor=ft.colors.BLUE_500
    def fechar_painel(e):
        mensagem.value+="\nAba dispensada"
        page.update()
    def clicar_destino(e):
        mensagem.value+=f"\nFoi selecionado o índice: {e.control.selected_index}"
        if e.control.selected_index==3:
            page.close(aba)
        page.update()
    aba=ft.NavigationDrawer(
        bgcolor=ft.colors.BLUE_600,
        on_dismiss=fechar_painel,
        on_change=clicar_destino,
        controls=[
            ft.Container(height=12),
            ft.NavigationDrawerDestination(
                label="Item 1",
                icon=ft.icons.AIRPLANEMODE_ON,
                selected_icon_content=ft.Icon(ft.icons.AIRPLANEMODE_INACTIVE),
            ),
            ft.NavigationDrawerDestination(
                icon_content=ft.Icon(ft.icons.AIRPLANE_TICKET),
                label="Item 2",
                selected_icon=ft.icons.AIRPLANE_TICKET_OUTLINED,
            ),
            ft.NavigationDrawerDestination(
                icon_content=ft.Icon(ft.icons.AIRPORT_SHUTTLE),
                label="Item 3",
                selected_icon=ft.icons.DEBLUR_SHARP,
            ),
            ft.Divider(thickness=2),
            ft.NavigationDrawerDestination(
                icon_content=ft.Icon(ft.icons.CHALET),
                label="Fechar Aba",
                selected_icon=ft.icons.PHONE,
            ),
            ft.NavigationDrawerDestination(
                label="Feche a aba clicando no ícone\n ou fora da aba"
            ),
        ],
    )
    mensagem=ft.Text("Suas ações serão vistas aqui:\n", color=ft.colors.BLACK)
    centro=ft.Container(
        content=mensagem,
        margin = ft.margin.only(left=300, top=0, right=0, bottom=0),
        padding=30,
        width=300,
        height=230,
        border_radius=10,
        bgcolor=ft.colors.AMBER_100,
    )
    page.add(
        ft.ElevatedButton("Exibir drawer", on_click=lambda e: page.open(aba)),
        centro
    )
ft.app(main)

A figura 1 mostra o estado do aplicativo em execução. 1 (A) é o estado inicial, antes de qualquer ação do usuário. 1 (B) exibe a aba após o clique sobre Exibir drawer. 1 (C) é o estado após um clique sobre os três itens, seguido do clique sobre Fechar Aba ou em qualquer ponto da página fora da aba.
