Présentation de Flet

Flet 1.0 est un framework open‑source qui transforme du code Python pur en interfaces graphiques exécutables sur iOS, Android, Windows, macOS, Linux et le Web. L’ensemble des plateformes repose sur un seul dépôt de code, ce qui élimine la duplication de logique métier. La documentation indique plus de 150 contrôles (boutons, listes, dialogues, etc.) et une bibliothèque de services couvrant la navigation, les formulaires et la thématisation. Aucun savoir‑faire en HTML, CSS ou JavaScript n’est requis, ce qui ouvre la création d’interfaces à des développeurs Python traditionnels.

Architecture et mécanismes d’exécution

Flet sépare le runtime Python du rendu visuel. Deux modes sont possibles : le code s’exécute dans le navigateur grâce à Pyodide et WebAssembly, ou il tourne sur un serveur qui pousse les mises à jour d’UI via WebSocket. La commande flet run démarre un serveur local, expose une page HTML contenant le moteur Flutter compilé en WebAssembly, puis synchronise les états des contrôles avec le processus Python. Cette approche minimise la latence perçue tout en conservant la puissance du backend Python.

import flet as ft

def main(page: ft.Page):
    counter = ft.Text("0", size=50, data=0)
    def increment(e):
        counter.data += 1
        counter.value = str(counter.data)
    page.floating_action_button = ft.FloatingActionButton(
        icon=ft.Icons.ADD, on_click=increment)
    page.add(ft.Container(content=counter, alignment=ft.Alignment.CENTER, expand=True))

ft.run(main)

Le même exemple peut être réécrit en style déclaratif, où chaque interaction génère un nouvel arbre de widgets. Cette dualité permet aux équipes de choisir entre mise à jour directe (imperative) ou reconstruction complète (declarative) selon les exigences de performance.

Écosystème de contrôles et intégrations Python

Les contrôles fournis par Flet sont des wrappers de widgets Flutter, mais ils restent accessibles depuis Python. Par exemple, ft.Text, ft.Button ou ft.Container acceptent des paramètres typés (size, alignment, data) qui sont sérialisés en JSON avant d’être transmis au client. Flet inclut des paquets précompilés pour iOS et Android, ce qui évite la compilation manuelle de dépendances natives telles que NumPy, pandas, Pillow ou cryptography. Cette stratégie réduit le temps d’intégration de bibliothèques scientifiques dans des applications mobiles.

Les développeurs peuvent créer des contrôles personnalisés en écrivant du code Python qui encapsule un widget Flutter ou en enveloppant directement un package Flutter via une extension. Le framework expose également des API d’accessibilité : chaque contrôle peut recevoir un label, des propriétés sémantiques et des raccourcis clavier, facilitant la conformité aux normes d’accessibilité.

Déploiement et chaîne d’outils

Le processus de mise en production s’appuie sur la commande flet build, qui génère des paquets natifs pour desktop (Windows, macOS, Linux), mobile (iOS, Android) et web. Les artefacts sont compatibles avec les stores d’applications, ce qui simplifie la distribution. Au niveau du test, Flet intègre pytest avec des fixtures capables d’interagir avec les contrôles, d’insérer du texte et de capturer des captures d’écran sur iOS et Android, assurant une couverture fonctionnelle automatisée.

Flet MCP (Model‑Centric Programming) fournit un assistant IA capable de récupérer la documentation versionnée, de suggérer des icônes ou des options CLI, et d’aider à la résolution de problèmes en temps réel. Enfin, Flet Studio, un IDE web, permet d’éditer, d’exécuter et de partager des projets sans installation locale, renforçant la collaboration entre développeurs et designers.