Flet: Page, métodos e eventos

Flet, Layout: Page

O objeto page é o primeiro conteiner na construção da árvore de controles do Flet, sendo o único que não está ligado a um conteiner pai. Ele contém o objeto View que, por sua vez abriga todos os outros controles. Uma instância de page e uma view primária são criadas automaticamente quando uma sessão é iniciada.

Métodos de page

Método Ação
can_launch_url(url) Verifica se a url pode ser acessada pelo aplicativo.
Retorna True se é possível gerenciar uma URL com o aplicativo. Caso retorne False isso pode significar que não há como vertificar se o recurso está disponível, talvez devido à falta de permissões. Nas versões mais recentes do Android e iOS esse método sempre retornará False, exceto se o aplicativo for configurado com essa permissão. Na web ele retornará False exceto para esquemas específicos, pois páginas web, por princípio, não devem ter acesso aos aplicativos instalados.
close_banner() Fecha o banner ativo.
close_bottom_sheet() Fecha o pé de página.
close_dialog() Fecha a caixa de diálogo ativa.
close_in_app_web_view() 📱 Fecha visualização de página web iniciada com launch_url() de dentro do aplicativo.
get_clipboard() Recupera o último texto salvo no clipboard do lado do cliente.
go(route) Um método auxiliar para atualizar page.route. Ele aciona o evento page.on_route_change seguido de page.update().
launch_url(url) Abre uma URL em nova janela do navegador.

Abre uma nova página exibindo o recurso descrito na URL.
Admite os argumentos opcionais:

  • web_window_name: nome da janela ou tab de destino. “_self”, na mesma janela/tab, “_blank”, nova janela/tab (ou em aplicativo externo no celular); ou “nome_do_tab”: um nome personalizado.
  • web_popup_window: True para abrir a URL em janela popup. Default: False.
  • window_width – opcional, largura da janela de popup.
  • window_height – opcional, altura da janela de popup.
page.get_upload_url(file_name, expires) Gera URL para armazenamento de upload.
scroll_to(offset, delta, key, duration, curve) Move a posição de scroll para local absoluto ou incremento relativo. Detalhes em scroll_to.
set_clipboard(data) Insere conteúdo no clipboard do lado do cliente (navegador ou desktop). Ex.: page.set_clipboard("Esse valor vai para o clipboard").
show_banner(banner: Banner) Exibe um Banner no pé de página.
show_bottom_sheet(bottom_sheet: BottomSheet) Exibe um BottomSheet no pé de página.
show_dialog(dialog: AlertDialog) Exibe caixa de diálogo.
show_snack_bar(snack_bar: SnackBar) Exibe um SnackBar no pé de página.
window_center() 🖥️ Move a janela do aplicativo para o centro da tela.
window_close() 🖥️ Fecha a janela do aplicativo.
window_destroy() 🖥️ Força o fechamento da janela. Pode ser usado com page.window_prevent_close = True para exigir a confirmação do usuário para encerramento do aplicativo.

import flet as ft

def main(page: ft.Page):
    def fechar(e):
        page.dialog = caixa_dialogo
        caixa_dialogo.open = True
        page.update()

    def sim(e):
        page.window_destroy()

    def nao(e):
        caixa_dialogo.open = False
        page.update()

    caixa_dialogo = ft.AlertDialog(
        modal=True,
        title=ft.Text("Confirme..."),
        content=ft.Text("Você quer realmente fechar o aplicativo?"),
        actions=[
            ft.ElevatedButton("Sim", on_click=sim),
            ft.ElevatedButton("Não", on_click=nao),
        ],
        actions_alignment=ft.MainAxisAlignment.END,
    )

    page.add(ft.Text("Feche a janela do aplicativo clicando o botão \"Fechar\"!"))
    page.add(ft.ElevatedButton("Fechar", icon="close", on_click=fechar, width=250))

ft.app(target=main)

window_to_front() 🖥️ Traz a janela do aplicativo para o primeiro plano.

Eventos de page

Evento Dispara quando
on_close uma sessão expirou por um tempo configurado. Default: 60 minutos.
on_connect o usuário da web conecta ou reconect uma sessão. Não dispara na primeira exibição de uma página mas quando ela é atualizada. Detecta a presença do usuário online.
on_disconnect o usuário se desconecta de uma sessão, fechando o navegador ou a aba da página.on_error ocorre um erro não tratado.
on_keyboard_event
on_resize É o evento disparado quando a janela do aplicativo é redimensionada pelo usuário.

def page_resize(e):
    print(f"A página foi redimensionada para: Laugura = {page.window_width}, Altura = {page.window_height})
page.on_resize = page_resize
on_route_change Evento disparado quando a rota da página é alterada no código, pela alteração da URL no navegador ou uso dos botões de avançar ou retroceder. O objeto e passado automaticamente pelo evento é uma instância da classe RouteChangeEvent:

class RouteChangeEvent(ft.ControlEvent):
    route: str     # passando uma nova rota para a página raiz
on_scroll a posição de scroll é alterada pelo usuário. Tem mesmo comportamento de Column.on_scroll.
on_view_pop Evento disparado quando o usuário clica o botão Back na barra de controle AppBar.
O objeto de evento e é uma instância da classe ViewPopEvent.

class ViewPopEvent(ft.ControlEvent):
    view: ft.View

sendo view uma instância do controle View, o conteiner da AppBar.

on_window_event Evento disparado quando a janela do aplicativo tem uma propriedade alterada: position, size, maximized, minimized, etc.
Pode ser usado com window_prevent_close=True (para interceptar sinal de close) e page.window_destroy() para implementar uma lógica de confirmação de término do aplicativo.

Os nomes eventos de janela possíveis são: close, focus, blur, maximize, unmaximize, minimize, restore, resize, resized (macOS e Windows), move, moved (macOS e Windows), enterFullScreen e leaveFullScreen.

Bibiografia

2 thoughts on “Flet: Page, métodos e eventos

  1. Bom dia, material espetacular sobre o flet. Espero que você dê continuidade.

    • Obrigado Alisson.
      Espero sim dar sequência ao conteúdo.
      Me ajude a divulgar.

Leave a Reply

Your email address will not be published. Required fields are marked *