Flutter (https://flutter.dev/) è un toolkit per creare UI multipiattaforma con una singola codebase. Il focus di questa libreria sono i sistemi mobile, ma può funzionare con qualche limitazione anche per lo sviluppo di applicazioni desktop e web application. Non è adatta allo sviluppo di siti web e, come vedremo, neanche per lo sviluppo embedded. Come le altre soluzioni presentate in questa serie di articoli, Flutter utilizza un suo motore di rendering che richiede un porting per supportare nuove piattaforme. Questo motore di rendering è specializzato per il caso 2D e non supporta l’integrazione con viste OpenGL.

Licenza

La licenza con cui è distribuito Flutter è la molto liberale BSD 3-Clause, per cui è possibile realizzare applicazioni proprietarie senza pagare licenze né royalties.

Piattaforme supportate

Flutter supporta in maniera egregia i sistemi mobile; a seguire, in ordine di completezza del supporto sono i sistemi Desktop, il web e i sistemi embedded. Non esistono widget per desktop già pronti con lo stile della piattaforma.

Linguaggi di programmazione

Flutter è una libreria UI scritta per il linguaggio Dart (https://dart.dev). La sintassi scelta è comoda, quindi a mio parere non si sente l’assenza di un linguaggio specifico per la scrittura di UI. Tutta l’applicazione (compresa la business logic) deve essere scritta in Dart.

Gestione immagini e font

I formati di immagini supportati sono molti, ma tristemente non esiste un supporto integrato per gli SVG (è necessario un modulo esterno). Per quanto riguarda i font, è possibile caricare font personalizzati senza scrivere codice.

Tooling

Sicuramente lo strumento hot reload è il più interessante, permette di lanciare una volta sola l’applicazione e vedere automaticamente le modifiche quando si salva il file. Altri strumenti interessanti sono gli strumenti per la localizzazione e per l’accessibilità, questi ultimi sicuramente più avanzati di altre soluzioni concorrenti. Non sono presenti strumenti grafici per la costruzione delle UI.

Scalabilità

Il toolkit è sufficientemente ottimizzato da poter essere usato a partire da sistemi Linux embedded fino a sistemi desktop. La parte di embedded non è il focus della libreria, infatti non c’è alcun supporto ufficiale per sistemi embedded. Non è possibile usarlo su MCU.

Maturità

La libreria è matura: è sviluppata da Google per le sue app multi piattaforma e dal 2021 è arrivata alla versione 2.0. Non esiste supporto a pagamento fornito da Google; se serve, è necessario affidarsi a consulenti di terze parti.

Documentazione

La documentazione della libreria è di ottimo livello: esistono app di esempio, tutorial, reference e numerosi video di riferimento pubblicati sul sito.

Conclusioni

Flutter è una libreria grafica ottimizzata per lo sviluppo di applicazioni mobile, che però può essere usata anche per lo sviluppo di app desktop.

Tra i fattori positivi annovera numerosi widget pronti, al punto che un neofita può essere sopraffatto dai vari componenti disponibili, una ottima documentazione e un buon supporto alle tecnologie per l’accessibilità.

Tra i fattori negativi vorrei sottolineare che ad oggi non può essere usata per lo sviluppo (Linux) embedded perché non esistono porting ufficiali del runtime; inoltre, Flutter richiede di imparare il linguaggio Dart per scrivere anche la business logic, perché la macchinosità del sistema di FFI (Foreign Function Interface, che serve per importare librerie scritte in altri linguaggi) scoraggia l’utilizzo di librerie non scritte in Dart.

Le features che non mi sono piaciute sono il sistema di localizzazione basato su ID (simile a quello usato per le applicazioni Android) invece che su stringhe sorgenti (come ad esempio Qt o gettext).

In conclusione, Flutter è un’ottima libreria per scrivere app mobile cross platform (iOS, Android) con un look and feel nativo; forse ad oggi è la soluzione più forte per creare app multipiattaforma. Per i casi d’uso desktop e web application è, a mio parere, poco interessante per via delle limitazioni che abbiamo visto; se però avete la business logic già implementata per l’app, potete riutilizzarla per il desktop.

Altri articoli della serie

4 Librerie per GUI embedded a confronto
Qt: 4 Librerie per GUI embedded a confronto
LVGL: 4 librerie per GUI embedded a confronto
Slint: 4 Librerie per GUI embedded a confronto