Flutter: sviluppa app per smartphone in un solo colpo

flutter
Condividi questo articolo
flutter

Quando si sceglie di sviluppare un’applicazione mobile si pongono alcuni quesiti, uno di questi è il seguente:

  • Per quali piattaforme deve essere sviluppato? iOs o Android?

Se la risposta è “entrambi” ecco che si pone un ulteriore quesito: utilizzare il linguaggio nativo o un framework multi-piattaforma?

La domanda non è banale e presto capiremo il perché. I linguaggi nativi per questi due sistemi operativi sarebbero rispettivamente Swift (iOs) e Java/Kotlin (Android).

Utilizzare questi linguaggi richiede uno sforzo maggiore dal momento che l’applicazione sviluppata non sarà in alcun modo eseguibile sull’altro sistema. È per questo che in questo articolo presenteremo Flutter e, senza perderci troppo in giri di parole, analizzeremo quali sono i suoi punti di forza e di debolezza, affinché tu possa capire se vale la pena, per il tuo caso specifico, affrontare lo studio di questo framework.

Flutter: il momento delle presentazioni

Flutter è un framework sviluppato da Google che si basa sul linguaggio, sempre di mamma Google, Dart. Dunque, di per sé Flutter non è un linguaggio di programmazione, è per l’appunto un framework basato su Dart.

Si tratta di un framework open source, dunque, oltre ad essere disponibile gratuitamente, è sostenuto da una vasta comunità di collaboratori che lo fanno crescere.

Dart, l’anima di questo framework, è un linguaggio di programmazione ad oggetti simile a qualsiasi altro linguaggio che adotti questo paradigma di programmazione. La sintassi, per chi non fosse alle primissime armi, è intuitiva e veloce da apprendere.

La filosofia di Flutter è quella di sviluppare applicazioni scrivendo solamente una volta il codice: infatti nel momento della compilazione sarà Flutter stesso a adattare quello che abbiamo scritto alla piattaforma in uso. Solitamente si parla di Flutter per lo sviluppo mobile, ma questo non è corretto, sebbene in questo articolo parleremo solo di sviluppo mobile: con Flutter è possibile sviluppare anche web app e applicazioni desktop.

Sviluppare con Flutter potrebbe risultare molto intuitivo a uno sviluppatore web abituato a definire layout mediante dei container <div>. Infatti Flutter lo potremmo sintetizzare con una parola: Widget.

I widget possiamo vederli come delle scatole in grado di contenere altre scatole nel loro interno. Ogni scatola possiamo decorarla come vogliamo e dargli le funzionalità che preferiamo. Quindi potremmo avere un grosso scatolone (la schermata principale) e al suo interno mettere altre scatole più piccole (bottoni, immagini, scatole complesse fatte di altre scatole).

Sebbene inizialmente potrebbe risultare un approccio antipatico o, peggio, complicato, è con il tempo che si apprezza questa struttura: ti renderai conto di come ogni cosa si trova al suo posto e ti risulterà più facile modificare l’interfaccia in ogni momento.

Perché scegliere Flutter?

Prima abbiamo accennato al fatto che non fosse banale prendere una scelta simile. Intuitivamente si potrebbe pensare che ciò che semplifica un lavoro sia sicuramente la scelta migliore. Ma questo è giusto solamente nella maggior parte dei casi.

Infatti, è doverosa un’osservazione: un linguaggio nativo è per definizione il linguaggio che un sistema operativo “capisce meglio” rendendo più reattiva ed efficiente l’app stessa.

Metaforicamente è come se tu, madrelingua italiano, conoscessi benissimo l’inglese. Sei perfettamente in grado di comunicare in inglese e lo fai senza intoppi, ma sicuramente nel parlare la tua lingua madre saresti più spedito. Se questo può andare bene per la maggior parte dei lavori, potrebbero essercene alcuni in cui il ritmo frenetico delle istruzioni non ti consentirebbe di stare perfettamente al passo.

Quello che bisogna dunque chiedersi è il livello di efficienza che desideri dalla tua app, tenendo inoltre conto che alcune funzionalità avanzate del sistema operativo sono più complesse da raggiungere senza il linguaggio nativo. Stai sviluppando applicazioni molto complesse come, ad esempio, un videogioco in 3D? Stai sviluppando un’applicazione di editing video? Stai sviluppando un’applicazione che deve accedere ai dati biometrici salvati nel dispositivo? Questi sono esempi in cui potresti dover ragionare bene sull’utilizzo di Flutter.

Al contrario: stai sviluppando un’applicazione per organizzare partite di calcetto? Stai sviluppando un’applicazione gestionale per la tua azienda? Stai sviluppando un’applicazione per il tuo negozio? Stai sviluppando un videogioco indie? In questi casi è molto vantaggioso prendere in considerazione Flutter.

Attenzione: allo stato attuale Flutter è un framework veramente avanzato sul tema delle prestazioni e nulla impedisce di fare applicazioni molto complesse con esso. Non è raro, infatti, che vi imbattiate in discussioni riguardo la sua “quasi” equivalenza alle prestazioni di un’app nativa. Questo è sicuramente vero, tuttavia il fatto che sia molto avanzato in tal senso non vuol dire che è perfettamente uguale alle prestazioni native.

Flutter presenta inoltre alcune caratteristiche che ne migliorano l’appeal:

  • Hot reload: permette di vedere le modifiche apportate al codice in tempo reale, senza dover riavviare l’app, velocizzando lo sviluppo e la prototipazione. In poche parole Flutter aggiorna solo gli elementi che hanno subito una modifica, lasciando intatto tutto il resto, risparmiandosi di ricaricare volta per volta tutto il codice.
  • Look&Feel fedele ad Android e iOS. A breve approfondiremo questo concetto.
  • Molto di moda. E no, non si tratta di un’affermazione superficiale di qualcuno a cui piace seguire la massa: una tecnologia che va di moda è una tecnologia ampiamente supportata dalla community. Vuol dire che online trovi tantissimo materiale di studio e tantissime risposte ai tuoi quesiti.
  • Codice veloce e leggero. Anche se lo abbiamo già detto è bene ribadirlo in questa lista.

Cosa serve per sviluppare app con Flutter?

Per iniziare a lavorare con Flutter oltre a una buona dose di forza di volontà nell’imparare è necessaria una minima esperienza nell’ambito della programmazione. Nulla impedisce di iniziare a imparare da Flutter, tuttavia ci sono alcuni paradigmi che sarebbe bene imparare al di fuori di un framework. Un framework è infatti uno strumento che semplifica il lavoro di uno sviluppatore, ma poggiare le basi della propria formazione orientandosi direttamente a un framework potrebbe risultare confusionario.

In ogni caso quello che bisogna imparare per primo è il linguaggio Dart. Ti consiglio di cercare risorse gratuite (YouTube) o a pagamento (ad esempio su Udemy) su questo linguaggio prima di cominciare a pensare a Flutter. Durante il tuo apprendimento potresti utilizzare il compilatore Dart online a questo indirizzo (https://dartpad.dev/).

Dopodiché è il momento di installare Flutter sul tuo sistema seguendo le istruzioni disponibili al sito ufficiale del framework: https://docs.flutter.dev/get-started/install

A questo punto è il momento di studiare il framework  in sé. Come prima ti consiglio di cercare risorse video di qualità su YouTube o piattaforme come Udemy. Se capisci bene l’inglese punta su quelle risorse, altrimenti sono comunque disponibili ottime risorse in italiano.

Un esempio di applicazione Flutter

È consuetudine mostrare un “Hello world” quando si presenta per la prima volta un linguaggio o un framework, e certamente non vogliamo essere da meno in questa occasione.

import 'package:flutter/material.dart';

void main() => runApp(HelloWorld());

class HelloWorld extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Hello World',
      home: Scaffold(
        appBar: AppBar(
          title: Text('La mia prima applicazione Flutter'),
        ),
        body: Center(
          child: Text('Hello World'),
        ),
      ),
    );
  }
}

Alternative a Flutter

Potresti pensare che l’unica alternativa allo sviluppo nativo delle applicazioni sia Flutter ma fortunatamente non è così. Un framework molto popolare in tal senso è React Native. A questo si aggiunge Xamarin, di Microsoft. C’è poi Ionic che offre delle prestazioni molto inferiori a flutter,  che si basa sull’uso di JavaScript e con cui è difficile ottenere un layout che rispetti il look&feel di un’app nativa (cosa che Flutter riesce a replicare egregiamente).

Il look&feel non è altro che l’aspetto grafico che ti fa capire su che dispositivo ti trovi. In altri termini guardando l’app ti rendi conto di essere su Android oppure su iOs. Esattamente come il vedere 3 pallini in altro a sinistra di una finestra ti fa capire di essere su macOS e non su Windows (che lo riconosci dai 3 bottoni quadrati in alto a destra).

Il concetto di look&feel possiamo semplificarlo in questa immagine: immagino che anche senza la didascalia avresti distinto i sistemi operativi in uso.

Test & Deploy della tua app

Per la fase di test e di rilascio della tua applicazione sarà fondamentale eseguire l’applicazione su un dispositivo virtuale (emulatore) oppure un dispositivo reale. In fase di installazione di Flutter provvedi a installare un emulatore Android (ci sono diversi modi, il più semplice e veloce è l’utilizzo di Android Studio) e un emulatore iOs (mediante Xcode).

È importante sapere che, in piena coerenza con la filosofia Apple, affinché tu possa testare e distribuire la tua applicazione su ambiente iOs è necessario utilizzare macOS con Xcode installato. Puoi utilizzare al limite macOS  virtuali (ad esempio sui https://www.macincloud.com/) ma è un approccio piuttosto scomodo a mio avviso.

Per la pubblicazione sui rispettivi store (Play Store e App Store) dovrai avere un account sviluppatore che, sfortunatamente, non è gratuito. Google vende la “licenza da sviluppatore” al prezzo una tantum di 25€, quindi una volta pagata questa somma potrai per sempre pubblicare sugli store Google senza mai più sborsare un euro. Diversamente Apple ha preferito la strada dell’abbonamento annuale che ha un costo decisamente maggiore: una licenza da programmatore costa 99€ l’anno (ma include, tra le varie cose, la possibilità di partecipare agli eventi di Apple come i WWDC).