Qui in DuckMa le app mobile vengono sviluppate nativamente in prevalenza.
Utilizzando gli SDK di Android e iOS possiamo sfruttare il massimo potenziale di ogni piattaforma, riuscendo così a soddisfare al meglio le esigenze dei nostri clienti.
Sebbene porti numerosi benefici, sviluppare applicazioni native ha uno svantaggio principale: tutto deve essere sviluppato due volte, una per ogni piattaforma (Android e iOS).
Perciò, negli ultimi anni, diverse compagnie hanno sviluppato tecnologie per fornire agli sviluppatori un SDK unificato per un facile sviluppo multipiattaforma.
Alcuni esempi includono PhoneGap di Adobe, Xamarin di Microsoft, React Native di Facebook e l’ultimo arrivato: Flutter di Google.
Disclaimer: quando abbiamo usato Flutter per la prima volta, l’SDK era ancora in fase beta.
È stata recentemente annunciata la Release Preview 1, quindi alcuni dei lati negativi potrebbero non essere più presenti.
Flutter
Originariamente presentato sotto il nome di Sky durante il Dart Developer Summit del 2015, Flutter è stato rilasciato come prima alpha a maggio 2017 durante l’evento Google I/O.
L’anno successivo entra in stato di beta e viene presentato con orgoglio da Google come un SDK per la creazione in tempi record di app mobile native di alta qualità su iOS e Android.
Mentre la maggior parte degli altri SDK consente un rilascio multipiattaforma, incorporando codice JavaScript in un’applicazione nativa, tramite WebView (PhoneGap) o tramite un motore dedicato (React-Native), Flutter utilizza un approccio diverso.
Flutter aggira il componente nativo di un’applicazione quasi interamente, utilizzando un motore di rendering personalizzato per disegnare l’interfaccia utente sullo schermo del dispositivo reale.
I Widget (Stateful e Stateless), scritti nel linguaggio di programmazione Dart, sono gli elementi di base utilizzati per creare sia l’interfaccia utente sia la logica di base di un’app Flutter.
Di fatto, l’intera app è un grande Widget che contiene Widget più piccoli, ognuno dei quali esegue il proprio compito specifico.
Creando Widget personalizzati e annidandoli con quelli già disponibili, uno sviluppatore può creare un’app sia per Android che per iOS.
Pro
La creazione di un’app mobile con Flutter ha diversi vantaggi, il maggiore è il suo valore di produttività.
Poiché le app Android e iOS condividono la stessa base di codice, il tempo necessario per la creazione di un’app si riduce notevolmente. Nel nostro caso abbiamo riscontrato una riduzione dei tempi di sviluppo di circa il 40%.
Siamo stati in grado di ridurre i tempi di sviluppo così tanto perché Flutter non ha ancora un linguaggio di template grafico.
Invece, ciascun Widget è responsabile allo stesso tempo sia della sua logica interna che del rendering della sua interfaccia utente.
Ciò richiede meno context switch da parte dello sviluppatore e consente modifiche più rapide durante lo sviluppo dell’app.
Grazie al modo in cui è costruito, Flutter incoraggia l’uso di buoni design pattern come la composition e il reactive development.
La composition è promossa annidando diversi Widget, ognuno dedicato a completare un’attività specifica e autonoma. Il reactive development è promosso dall’uso di Widget Stateful e Stateless combinati con un’architettura che impone un single point of truth, permettendo la trasmissione di dati dall’alto verso il basso.
Un’altra funzionalità utile dell’SDK di Flutter è l’Hot Reload: durante lo sviluppo di un’app è possibile apportare al volo modifiche al codice e sincronizzare direttamente le modifiche all’app in esecuzione – sull’emulatore o su un dispositivo reale – senza doverla riavviare.
Infine, poiché Flutter è realizzato da Google, si integra molto bene con gli altri servizi dello stesso.
Le API Firebase, in particolare, sono facili da installare, integrare e utilizzare all’interno di un’app Flutter.
Quindi, se le specifiche del backend dell’app permettono l’implementazione tramite i servizi di Firebase, Flutter fornisce una facile integrazione dei vari SDK disponibili.
Contro
Sebbene Flutter offra numerosi vantaggi che portano una ventata di novità nello sviluppo di app, l’SDK ha alcune limitazioni che non lo rendono ancora pronto per la produzione su larga scala.
Il problema principale che abbiamo riscontrato con Flutter ha avuto a che fare con il suo precoce stato di beta.
Siamo stati in grado di creare un’interfaccia utente dall’aspetto e comportamento nativo più velocemente del solito, ma ci siamo trovati in difficoltà quando abbiamo deciso di fornire alla nostra app alcune funzionalità dipendenti direttamente dalle piattaforme native.
La mancanza di integrazione di alcune API native ci ha costretti a scrivere queste funzionalità in Java per Android, in Swift per iOS per poi collegarle a Flutter tramite un platform bridge scritto in Dart.
Un altro problema è la mancanza generale di supporto disponibile sul sito web ufficiale di Flutter, di Dart o su altri siti web.
Dart è un linguaggio di nicchia che, nonostante gli sforzi di Google, ha un coinvolgimento molto basso su GitHub, StackOverflow, Freenode, Reddit ecc.
Per questo motivo risulta difficile trovare le risorse giuste quando necessario, o anche una vera e propria comunità di Flutter.
Una grande area che potrebbe essere notevolmente migliorata sono i messaggi per gli errori di compilazione.
Dal momento che Flutter non ha ancora raggiunto una fase di rilascio stabile, qualsiasi cosa può cambiare a ogni nuova versione: incluse le librerie esterne, gli strumenti di compilazione nativi e gli strumenti di compilazione di Flutter.
Questo può portare a build fallimentari senza ragioni apparenti e i messaggi forniti dal compilatore di Flutter non sono di grande aiuto per individuare la causa principale dell’errore.
In un caso siamo rimasti bloccati per ore cercando di fare una build iOS di un progetto Flutter solo perché la versione CocoaPods che stavamo usando non era compatibile.
Dopo molte ricerche abbiamo trovato un post su un blog remoto che spiegava lo stesso problema e suggeriva un downgrade di CocoaPods. Una volta eseguito il downgrade, la compilazione è stata completata correttamente.
Campi d’applicazione
Quindi, in definitiva, per che cosa può essere utilizzato Flutter? Flutter esprime al meglio il suo potenziale in quattro casi:
- Quando utilizzato per sviluppare piccole app focalizzate sull’interfaccia utente che, se necessario, si affidano a Firebase per i servizi di backend (vedi come esempio il nostro esperimento Daily Quote).
- Quando usato per nuovi progetti. È decisamente più semplice iniziare una nuova app tutta Flutter e crearla da zero piuttosto che includere alcuni elementi di Flutter in un’app già esistente.
- Per singoli sviluppatori. Se sei devi creare un’app da solo e hai come target sia Android che iOS, Flutter potrebbe essere la scelta giusta per te. La sua natura multipiattaforma può farti risparmiare numerose ore di sviluppo, evitando di scrivere tutto due volte.
- Prototipi. Senza dubbio Flutter è ottimo per la prototipazione di un’app, è veloce e divertente da usare.
Conclusione
Flutter è un nuovo SDK di sviluppo multipiattaforma costantemente migliorato da Google con ogni nuova versione.
Anche se la sua adozione da parte degli sviluppatori è lenta e il suo stato attuale non è ancora pronto per competere al 100% con gli SDK nativi, Flutter si è dimostrato una tecnologia interessante da tenere d’occhio.
Alla fine, Flutter sostituirà lo sviluppo standard di iOS e Android? Sicuramente no. Ma è una gradita aggiunta alla famiglia di SDK focalizzati sullo sviluppo multipiattaforma.
Hai bisogno di più informazioni per l’applicazione che intendi realizzare?
Compila il form, in modo da poter prenotare la tua consulenza gratuita di 30 minuti ed ottenere un primo orientamento sul tuo progetto:
Referenze
- Wikipedia | Flutter (software)
- Quora | What is the difference between PhoneGap and Cordova, and why would I select one over another? Cordova is the name of the open source version of PhoneGap, used by Adobe with Cordova as its engine.
- Google’s Flutter
- Wikipedia | Reactive programming
- Announcing Flutter Release Preview 1
- Who Uses Dart
- Tech Republic | The 5 worst programming languages to learn in 2018
- Netguru | Introduction to Flutter: Part 1
- ProAndroidDev | Testing Flutter Applications
- Flutter Rocks | Putting build methods on a diet – tips and tricks for cleaner Flutter UI code