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.