Flet: Flutter para Python
Baseado no Flutter (veja seção abaixo) foi desenvolvida a biblioteca Flet, um framework que permite a construção de aplicações web, desktop e mobile multiusuário interativas usando o Python. O Flet empacota os widgets do Flutter e adiciona algumas combinações próprias de widgets menores, ocultando complexidades e estimulando o uso de boas práticas de construção da interface do usuário. Ele pode ser usado para construir aplicativos que rodam do lado do servidor, eliminando a necessidade de uso de HTML, CSS e Javascrip, e também aplicativos para celulares e desktop. Seu uso exige o conhecimento prévio de Python e um pouco de POO (programação orientada a objetos).
Atualmente (atualizado em abril de 2025) o Flet está na versão v0.27.6 e em rápido processo de desenvolvimento.
Flutter e Widgets
Flutter é um framework para o desenvolvimento (um SDK) de interface do usuário de software de código aberto criado pelo Google, e lançado em maio de 2017. Em outras palavras ele serve para a construção de GUIs (Interfaces Gráficas de Usuários), e é usado para desenvolver aplicativos em diversas plataformas usando um único código base.
A primeira versão do Flutter (Flutter Sky) rodava no sistema operacional Android e, segundo seus desenvolvedores, podia renderizar 120 quadros por segundo. O Flutter 1.0, a primeira versão estável do framework, foi lançado em 2018. Em 2020 surgiu o kit de desenvolvimento de software Dart (SDK) versão 2.8 com o Flutter 1.17.0, em que foi adicionado suporte para API que melhora o desempenho em dispositivos iOS, juntamente com novos widgets de materiais e ferramentas rastreamento em rede.
O Flutter 2 foi lançado pelo Google em 2021, incluindo um novo renderizador Canvas Kit para aplicativos baseados na web e aperfeiçoamento no suporte de aplicativos web e desktop para Windows, macOS e Linux. Em setembro de 2021, o Dart 2.14 e o Flutter 2.5 foram lançados, com melhorias para o modo de tela cheia do Android e a versão mais recente do Material Design do Google. Em 2022 o Flutter foi lançado expandindo o suporte a plataformas, com versões estáveis para Linux e macOS em arquiteturas diversas. O Flutter 3.3 trouxe interoperabilidade com Objective-C e Swift e uma versão preliminar de um novo mecanismo de renderização chamado “Impeller”. Em janeiro de 2023 foi anunciado o Flutter 3.7.
Aplicativos elaborados com Flutter são baseados em Widgets. Widgets são pequenos blocos de aplicativo com representação gráfica, que podem ser inseridos dentro de ambientes gráficos mais gerais , usados em aplicativos web ou desktop. Eles aparecem na forma de botões, caixas de texto, relógios e calendários selecionáveis, menus drop-down, etc, e servem basicamente para a interação com o usuário, ou recebendo inputs, como um clique em um botão, ou exibindo resultados, como um texto de resposta ou um gráfico.
Instalando o Flet
Podemos descobrir se o Flet está instalado iniciando uma sessão interativa do Python e tentando sua importação. Se não estiver instalado uma mensagem de erro será emitida:
$ python Python 3.12.0 (... etc.) >>> import flet ModuleNotFoundError: No module named 'flet'
Flet exige Python 3.7 ou superior. Para instalar o módulo podemos usar o pip. Como ocorre em outros casos, é recomendado (mas não obrigatório) instalar a nova biblioteca dentro de um ambiente virtual.
# criamos um ambiente virtual com o comando $ python3 -m venv ~/Projetos/.venv # para ativar o ambiente virtual $ cd ~/Projetos/.venv $ source bin/activate # agora podemos instalar o flet $ pip install flet # para upgrade do flet, se já instalado $ pip install flet --upgrade # para verificar a versão do flet instalado (em abril de 2025) $ flet --version ↳ 0.27.6
$ pip install --upgrade pip
Mesmo após a instalação do flet um erro pode aparecer. Para executar código do python com flet no Linux são necessárias as bibliotecas do GStreamer. A maioria das distribuições do Linux as instalam por default.
Caso isso não aconteça e a mensagem de erro abaixo for emitida, instale o GStreamer.
# mensagem de erro ao executar python com flet error while loading shared libraries: libgstapp-1.0.so.0: cannot open shared object file: No such file or directory # Instalando GStreamer no fedora $ sudo dnf update $ dnf install gstreamer1-devel gstreamer1-plugins-base-tools gstreamer1-doc gstreamer1-plugins-base-devel gstreamer1-plugins-good gstreamer1-plugins-good-extras gstreamer1-plugins-ugly gstreamer1-plugins-bad-free gstreamer1-plugins-bad-free-devel gstreamer1-plugins-bad-free-extras # Instalando GStreamer no ubuntu $ sudo apt-get update $ sudo dnf install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
Um segundo erro pode ocorrer quando se tenta rodar um aplicativo do flet. Para resolver essa questão podemos instalar os pacotes mpv-libs
e mpv-devel
:
# ao executar um arquivo flet obtemos uma mensagem de erro $ python flet3.py /home/guilherme/.flet/bin/flet-0.23.2/flet/flet: error while loading shared libraries: libmpv.so.1: cannot open shared object file: No such file or directory # para resolver instalamos os pacotes (no fedora) $sudo dnf install mpv-libs $sudo dnf install mpv-devel # podemos verificar a existência dos pacotes na pasta apropriada $ cd /usr/lib64 $ find *mpv* # devemos ver a resposta libmpv.so libmpv.so.2 libmpv.so.2.1.0 # criamos um link simbólico para a pasta /usr/lib64/ $ sudo ln -s /usr/lib64/libmpv.so /usr/lib64/libmpv.so.1
O último passo, com a criação do link simbólico (também chamado de symlink), cria o arquivo libmpv.so.1
no diretório /usr/lib64/
que, ao ser chamado, carrega libmpv.so
.
Outras instruções de instalação podem ser encontradas na documentação do Flet, ou a instalação com Anaconda.
Feito isso podemos escrever nosso primeiro código flet, apenas com o esqueleto de um aplicativo. Ao ser executado ele apenas abre uma janela sem conteúdo. Abra um editor de texto, ou sua IDE preferida, e grave o seguinte arquivo, com nome flet1.py
:
import flet as ft def main(page: ft.Page): # controles da Página pass ft.app(target=main)
Esse código pode ser executado com:
$ python flet1.py # ou $ flet flet1.py
Ao executar python flet1.py
veremos apenas uma janela vazia, que pode ser fechada com os controles usuais de janela (ou CTRL-F4). O programa termina com flet.app(target=main)
, recebendo no parâmetro target a função que apenas recebe o objeto fleet.Page, main (podia ter outro nome qualquer). O objeto Page é como um Canvas onde, mais tarde, inseriremos outros widgets.
Da forma como escrevemos esse código, uma janela nativa do sistema operacional será aberta no desktop. Para abrir o mesmo aplicativo no browser padrão trocamos a última linha por:
ft.app(target=main, view=ft.AppView.WEB_BROWSER)
Nota: Aplicativos do Flet, rodando no desktop ou dentro do navegador, são aplicativos web. Ele se utiliza de um servidor chamado “Fletd” que, por default usa uma porta TCP aleatória. Uma porta específica pode ser designada atribuindo-se um valor para a parâmetro port:
flet.app(port=8550, target=main)
Em seguida abra o navegador com o endereço http://localhost:8550 para ver o aplicativo em ação.
Bibiografia
- Flet: Flet Documentation
- Flet: Flet Docs Tutorials
- Pypi.org: Flet 0.27.6
- Youtube: Dev JurisFlet: Aprendendo os conceitos básicos para criação de apps Flutter com Python
- Hackernoon: Building Flutter Apps with Python
- Medium: Build a Markdown Editor Flutter App With the Flet Python Framework
- Medium: Flutter Apps in Python-Flet
- DEV: Build Flutter Apps using Python Flet
Todas as URLs acessadas em abril de 2025.