NavigationRail
NavigationRail é um controle de navegação que pode ser exibido ao lado (direito ou esquerdo) de um controle principal, servindo como um menu de escolha entre algumas poucas opções.
Exemplo básico
O exemplo abaixo mostra um aplicativo com uma linha (ft.Row) contendo uma ft.NavigationRail, uma linha divisória e uma coluna com um único texto. A ft.NavigationRail, por sua vêz, contém um texto inicial, 3 controles ft.NavigationRailDestination e um texto final.
import flet as ft def main(page: ft.Page): page.bgcolor=ft.Colors.GREY_400 page.add( ft.Row([ ft.NavigationRail( leading=ft.Text("Início"), destinations=[ ft.NavigationRailDestination(icon=ft.Icons.WOMAN, label="Mulher"), ft.NavigationRailDestination(icon=ft.Icons.MAN, label="Homem"), ft.NavigationRailDestination(icon=ft.Icons.CHILD_FRIENDLY, label="Criança") ], trailing=ft.Text("Final") ), ft.VerticalDivider(width=1), ft.Column([ ft.Text("Texto\ndo\nAplicativo!")])], expand=True ) ) ft.app(main)
O resultado da execução desse código está mostrado na figura 1.
Para fazer com que o NavigationRail apareça à direita vasta inverter a ordem de inserção dos objetos inseridos na linha ft.Row.
Propriedades de NavigationRail
Propriedade | Descrição |
---|---|
bgcolor | a cor do Container com o conteúdo do NavigationRail. |
destinations | define os itens de botão que são dispostos no NavigationRail. O valor é uma lista de 2 ou mais instâncias de NavigationRailDestination. |
elevation | o tamanho da sombra abaixo do NavigationRail. O default é 0.0 . |
extended | Booleano com default False . Indica se NavigationRail deve ser estendido para ocupar o espaço disponível na página. No estado estendido o controle apresenta um padding lateral mais largo e os rótulos ficam ao lado dos ícones. Caso contrário esses rótulos ficam abaixo dos ícones e o container é mais estreito.
A propriadade min_extended_width é usada para definir a largura mínima do container quando estendido. No estado estendido deve-se definir |
group_alignment | o alinhamento vertical para a lista de destinos dentro do container. Os controles filhos NavigationRailDestinations ficam dispostos entre os widgets postos em leading (no início da lista) e trailing (no fim da lista).
O valor deve ser um float entre |
indicator_color | cor dos indicadores do NavigationRail. |
indicator_shape | formato dos indicadores do NavigationRail. O valor é do tipo OutlinedBorder e o default é StadiumBorder(). |
label_type | layout e o comportamento dos rótulos (labels) dentro do NavigationRail no estado default e não estendido. Os rótulos são sempre exibidos quando o controle está estendido.
O valor é do tipo NavigationRailLabelType e o default é |
leading | um controle opcional colocado acima dos destinos no controle principal. Sua localização não é afetada por group_alignment.
O controle em leading geralmente é um FloatingActionButton, mas pode ser outro controle que não um botão, como uma imagem de um logotipo, por exemplo. |
min_extended_width | a largura final quando a animação estiver concluída quando se ajusta extended=True . O default é 256 . |
min_width | a menor largura possível para o controle, independentemente dos tamanhos dos ícones ou rótulos dos destinos.
O default é |
selected_index | índice selecionado na lista do NavigationRailDestination. Se selected_index=None nenhum destino é selecionado. |
selected_label_text_style | o estilo TextStyle do rótulo de um destino selecionado. Quando o destino não está selecionado o estilo em unselected_label_text_style será usado. |
trailing | Um controle opcional no NavigationRail, exibido abaixo dos destinos. Sua localização é afetada por group_alignment.
Pode ser usada uma lista de opções ou destinos adicionais que apenas é renderizada quando |
unselected_label_text_style | o estilo TextStyle do rótulo de destino não selecionado. Quando o destino está selecionado o estilo em selected_label_text_style será usado. |
Evento de NavigationRail
Evento | Descrição |
---|---|
on_change | dispara quando o destino selecionado é alterado. |
NavigationRailDestination
Propriedades
Propriedades | Descrição |
---|---|
icon | ícone a exibir no destino.
# pode receber o ícone diretamente: icon=ft.Icons.CHILD_FRIENDLY # ou um controle flet.Icon icon=ft.Icon(ft.Icons.CHILD_FRIENDLY) Se selected_icon for fornecido, esse ícone só é exibido quando o destino não estiver selecionado†. |
icon_content | idêntico à propriedade icon. Esse controle está obsoleto e será removido. Use icon. |
indicator_color | cor do indicator_shape (descrito abaixo) quando o destino é selecionado. |
indicator_shape | formato do indicador de seleção. O valor é uma instância da OutlinedBorderclasse. |
label | string mostrada no rótulo do destino. Só é exibida se label_content (descrito abaixo) não é fornecido. |
label_content | um controle usado como rótulo do destino. Se fornecido, label será ignorado.
O label deve ser fornecido no NavigationRail. Se for declarado |
padding | espaço interno para o item de destino. O valor é uma instância da classe Padding. |
selected_icon | nome do ícone ou controle alternativo exibido quando o destino é selecionado.
# usando o nome do ícone: selected_icon=ft.Icons.BOOKMARK # uso com controle: selected_icon=ft.Icon(ft.Icons.BOOKMARK) Se não for fornecido, o NavigationRail exibe icon em qualquer dos estados. |
selected_icon_content | ícone alternativo quando o destino é selecionado. Obsoleto, use selected_icon. |
Nota: † Procure escolher ícones diferentes para estados diferentes, como ícones de traço e preenchidos para tornar o NavigationRail mais legível, como ft.Icons.CLOUD e ft.Icons.CLOUD_QUEUE. Ícones iniciais (icon) devem ser definidos para a versão com traço e selected_icon para a versão preenchida.
Exemplo de uso do NavigationRail
import flet as ft def main(page: ft.Page): page.bgcolor=ft.Colors.GREY_400 page.window.width=500 page.window.height=400 cidade=["Manaus", "Recife", "Olinda"] destinos=[ ft.NavigationRailDestination( icon=ft.Icons.LOCATION_CITY, selected_icon=ft.Icons.AIRPLANE_TICKET, label=cidade[0], ), ft.NavigationRailDestination( icon=ft.Icon(ft.Icons.random()), selected_icon=ft.Icon(ft.Icons.AIRPLANE_TICKET_SHARP), label=cidade[1], ), ft.NavigationRailDestination( icon=ft.Icons.LOCATION_HISTORY_SHARP, selected_icon=ft.Icon(ft.Icons.AIRPLANE_TICKET_OUTLINED), label=cidade[2], ), ] def getBotao(i): return ft.FloatingActionButton( foreground_color=ft.Colors.YELLOW, bgcolor=ft.Colors.BLUE_300, icon=ft.Icons.NEW_LABEL if i==0 else ft.Icons.DELETE, on_click=nova_rota if i==0 else apagar, text="Nova Seleção" if i==0 else "Apagar Tudo", ) def seleciona(e): texto_corpo.value+=f"\nDestino Selecionado: {cidade[e.control.selected_index]}" texto_corpo.update() def nova_rota(e): texto_corpo.value+=f"\n\nSelecione Nova Rota:\n{'-'*26}\n" texto_corpo.update() def apagar(e): texto_corpo.value=f"Selecione a sua rota:\n{'-'*26}\n" texto_corpo.update() rail = ft.NavigationRail( bgcolor=ft.Colors.BLUE, selected_index=0, label_type=ft.NavigationRailLabelType.ALL, min_width=180, min_extended_width=400, leading=getBotao(0), trailing=getBotao(1), group_alignment=0.0, destinations=destinos, on_change=seleciona, extended=False ) texto_corpo=ft.Text(f"Selecione a sua rota:\n{'-'*26}\n", color=ft.Colors.INDIGO_900, size=16) espaco_direita=ft.Container( content=texto_corpo, padding = ft.padding.all(15), border=ft.border.all(3, ft.Colors.BLUE_600), alignment=ft.alignment.top_left, bgcolor=ft.Colors.GREY_50, expand=True ) page.add(ft.Row([rail, ft.VerticalDivider(width=2), espaco_direita,], expand=True,)) ft.app(main)
O resultado da execução desse código está mostrado na figura 2.