Flutter is an open source framework by Google for building beautiful, natively compiled, multi-platform applications from a single codebase
fonte: flutter.dev
Cos’è Flutter?
Flutter è un framework open-source ideato direttamente da Google per rispondere alla continua evoluzione dei dispositivi mobile. L’obiettivo è quello di utilizzare una singola codebase per la programmazione informatica di app cross platform che girano in maniera nativa su dispositivi Android e sui dispositivi iOS e, inoltre, con le ultime versioni – ormai stabili – anche Web e Desktop.
Le prestazioni native di Flutter derivano da uno substrato scritto in C/C++, o meglio chiamato Flutter Engine, e uno strato scritto in Dart.
L’architettura di Flutter
La sua architettura può essere riassunta con la seguente immagine:
Fonte: Architettura/flutter.dev
I livelli di Flutter
Conosciamo meglio i 3 livelli:
- Embedder: fornisce un punto di ingresso al sistema operativo sottostante. Questo livello è scritto nel linguaggio di programmazione appropriato per la piattaforma su cui gira, attualmente Java e C++ per Android, Objective-C/Objective-C++ per iOS e macOS, e C++ per Windows e Linux; in altre parole consente alle app scritte in Flutter di poter girare su qualsiasi sistema operativo;
- Flutter Engine: è il core di Flutter, scritto interamente in C/C++, si occupa di fornire supporto a basso livello per il rendering dei widget dell’app Flutter, utilizzando la libreria Skia per le animazioni 2D. L’Engine è esposto al primo livello (Framework) attraverso la libreria dart:iu che espone le funzioni primitive di basso livello come quelle per il text-rendering, la gestione I/O;
- Dart: è un linguaggio ad oggetti strutturato e flessibile creato da Google, lavora a stretto contatto con il Flutter Engine con il quale è in grado di fornire la funzione di “Hot-Reload”, cioè ogni modifica del codice viene iniettata immediatamente nell’applicazione in modo da visualizzare all’istante i cambiamenti senza un riavvio completo.
Esempio di Hot-Reload
Flutter è stato lanciato sul mercato nel Maggio 2017 ma la prima versione stabile risale a Dicembre 2018. Da quel momento non gli è servito molto tempo per aumentare la sua popolarità e il suo utilizzo da parte del pubblico. Ad oggi (Dicembre 2021) Flutter vanta ben 133k Stelle su github a fronte di quasi 100k di react-native.
Questi valori sono intuibili anche su Google trend nell’immagine sottostante con altri suoi competitors.
Perché usare Flutter?
Dopo aver descritto brevemente alcuni particolari tecnici del funzionamento di Flutter e aver fatto notare di quanto la sua popolarità sia in netto aumento rispetto al suo più diretto competitor, viene naturale chiedersi: perchè usarlo? Qual è, realmente, il suo valore aggiunto?
Sicuramente le features di Flutter potranno spingerti ad adottarlo, abbandonando completamente i vecchi tools. Vediamole nel dettaglio:
- Single Codebase
- Hot-Reload e velocità di sviluppo
- Ecosistema ricco di Widget
- Dart
- Community
- MVP
1# Single Codebase
Come già ampiamente detto, Flutter garantisce lo sviluppo di un’applicazione sfruttando una singola base di codice. In parole povere, con lo stesso codice con cui si crea un’applicazione iOS si può generare un applicazione Android, Web o Desktop. Questa feature è stabile dal rilascio della versione 2.0.
2# Hot-Reload e velocità di sviluppo
Questa sua caratteristica permette ai web developer di poter osservare, istantaneamente, le modifiche effettuate sul codice, garantendo maggiori performance di sviluppo e tempi più snelli anche di debugging.
3# Ecosistema ricco di Widget
Possiamo descrivere Flutter come un intero widget.
Tutto al suo interno è un widget e i widget possono essere sia classi che funzioni: questo permette, infatti, all’applicazione dei principi della programmazione ad oggetti nello sviluppo della UI.
Ogni widget è customizzabile a proprio piacimento, ad esempio si possono wrappare dei widget dentro altri in modo da garantire specifiche funzioni su diverse risoluzioni dello schermo.
Flutter offre una miriade di UI widget che rispettano tutti gli attuali princìpi chiave del design di applicativi sia web che mobile, offrendo sempre ottime performance.
Il suo SDK è in grado di garantire tutto questo in quanto è l’unico che non utilizza alcun Bridge col linguaggio javascript per la creazione dei componenti, ma lavora facendo comunicare direttamente il core con il dispositivo aumentandone drasticamente le prestazioni.
I widget in Flutter sono organizzati attraverso un albero, in cui ognuno di loro può contenerne altri e così via. Sarà il programmatore informatico a dover fare attenzione all’organizzazione dei widget nella propria App, cercando di ingegnerizzare al meglio lo sviluppo.
Esempio di un widget tree in Flutter:
4# Dart
Dart è un linguaggio creato da Google; include una tipizzazione forte e una debole e offre una ricca libreria standard, un garbage collection, generics e async-await. Dart è molto simile a Java ma per molte funzionalità si ispira ad altri linguaggi di programmazione.
5# Community
Negli ultimi anni Flutter è cresciuto tantissimo di popolarità, meritandosi un posto nell’olimpo dei Framework per sviluppo cross platform. Questo ha favorito la crescita di una sempre più forte community attorno ad esso che contribuisce costantemente al miglioramento del framework, rendendo molto semplice la risoluzione di problematiche comuni.
6# MVP
Flutter può essere un fattore chiave per tutte quelle startup che devono creare un MVP.
Un MVP creato con Flutter è compatibile con diversi dispositivi da iOS ad Android, per finire a Desktop e Web. Sicuramente, questo è un fattore attrattivo per molti investitori, potendo facilitarli nella ricerca e prova del progetto di business creato.
7# Google
Il supporto a lungo termine di Google è una garanzia dell’affidabilità di Flutter nel futuro. Il team preposto al suo mantenimento apporta costantemente migliorie al Framework. Tieni sempre sott’occhio la Roadmap ufficiale che trovate a questo link.
I contro di Flutter
Ma non è tutto oro quel che luccica! Dopo aver parlato ampiamente delle feature positive di Flutter, vorremmo esporre anche alcuni dei suoi aspetti negativi.
Innanzitutto il Bundle Size dell’App finale è, sicuramente, molto più grande rispetto a quella di un'App nativa. Al momento un'App minima generata con Flutter, pesa almeno 4.3mb a fronte dei circa 500kb di un'App Nativa sviluppata con Java o Kotlin; inoltre essendo ancora costantemente in sviluppo, alcune funzioni o librerie potrebbero essere non ancora totalmente disponibili o compatibili. Come anche il supporto 3D, al momento Flutter non supporta questa feature, tuttavia è stata annunciata nella Roadmap futura.
La popolarità di Flutter è in costante aumento e non accenna a fermarsi. Ormai sempre più aziende lo adottano nei propri progetti, e se il presente sembra ancora React-native il futuro sarà sicuramente Flutter. Sul sito ufficiale di Flutter è possibile vedere alcune delle Top Apps create da aziende del calibro di Alibaba, Google, Uber, eBay e Airbnb.
Primi passi con Flutter
Per iniziare con Flutter ti consigliamo di seguire dettagliatamente la documentazione ufficiale e di controllare bene i requisiti del tuo pc, nello specifico:
- gli utenti Windows devono avere PowerShell 5.0 e Git for Windows pre-installati.
- gli utenti Mac OS hanno bisogno della versione 64-bit con Xcode 9.0 o uno più recente, mentre gli utenti Linux hanno a disposizione alcuni command-line tools nel loro sistema.
Inoltre, grazie alla community estremamente attiva di questo fantastico Framework, insieme alla sezione Learn della documentazione ufficiale, è possibile imparare un sacco di nozioni, cercando tra video e articoli che ti guiderà nello sviluppo della vostra prima App!