Tutti i corsiTutti gli articoli
Flutter Forward 2023: tutte le novità più importanti

Flutter Forward 2023: tutte le novità più importanti

Aggiornato il27.gen.2023/Fudeo.it/5 minuti

## Indice dei contenuti

È arrivato quel momento dell'anno tanto atteso da tutti noi sviluppatori Flutter! Il 25 Gennaio si è tenuto il consueto evento annuale di Google, in cui vengono annunciate major release di Flutter e Dart, viene fatto un resoconto dei traguardi raggiunti e si condividono con la community i prossimi passi per il framework.

Siamo pronti a raccontarvelo in breve.

Nel 2021 il focus dell'evento è stato su Flutter 2 e la migrazione alla Null Safety di Dart, che, nonostante sia stato abbastanza impegnativo per tutta la community, ne è sicuramente valsa la pena.

Nel 2022 l'attenzione è stata orientata sulla parte Web e Desktop, stabilizzando le fondamenta di questo framework anche per queste due piattaforme, permettendoci di sviluppare con un unico codice per Mobile, Desktop e Web.

Ed eccoci arrivati nel 2023.

Ormai Flutter è una tecnologia considerata matura, con startup ed aziende strutturate che decidono di costruire grosse parti dei loro business usando questo framework. Anche in questa edizione sono stati fatti dei nomi impotanti, ad esempio PubG (il produttore di videogiochi) che, dopo un'attenta analisi dei framwork disponibili, ha scelto Flutter per sviluppare la parte community dei loro videogiochi.

Ma quindi, quali sono le novità annunciate?

Proprio in virtù di questa maturità e stabilità, la community Flutter si sta concentrando principalmente sull'ottimizzare ancora di più il motore grafico utilizzato da Flutter, con 2 impegni differenti:

  • Impeller (un nuovo motore grafico) per Flutter Mobile

  • Web Assembly (un nuovo standard Web di compilazione di app native) per Flutter Web

Le altre novità degne di nota sono:

  • Miglioramento del supporto delle linee guida Material 3

  • Novità per Flutter iOS e Desktop

  • Migliorie ai DevTools di Flutter

Ed infine l'annuncio che Dart 3.0 è quasi pronto, versione che introdurrà la pubblicazione del compilatore in alpha-mode e alcune chicce a livello di linguaggio super interessanti!

## Impeller

Flutter utilizza SKIA come motore grafico per disegnare tutto quello che compare sullo schermo. E, come sappiamo, SKIA è stato ottimizzato nel corso di anni ed anni, con browser (es. Google Chrome) e sistemi operativi (es. Android) importanti che lo usano.

Tuttavia il team di Flutter ha dei progetti ancora più ambiziosi:

Uno dei grandi slogan di Flutter è diventato quello di produrre applicazioni che girano a 120Hz (il doppio del refresh rate medio) e per avere sempre queste prestazioni occorre innovare sul fronte del motore grafico.

Insomma, un po' come Apple con i suoi microchip quando ha deciso di passare dagli Intel ai sui M1/M2.

Ecco quindi che è nato il progetto Impeller, attualmente disponibile solamente per iOS e che ha già prestazioni pari (ed in alcuni edge case anche superiori) a SKIA.

L'obiettivo è quello di rendere Impeller un valido sostituto di SKIA.

Sicuramente sarà interessante vedere quali innovazioni verranno fuori da questo progetto, che è open source e si può seguire a questo link: (https://github.com/flutter/engine/tree/main/impeller.

## Web Assembly per il Web

Web Assembly è un nuovo standard e linguaggio di basso livello (istruzioni macchina per intenderci) per il Web, che permette di eseguire codice compilato in maniera nativa all'interno del browser di un utente.

L'innovazione che Web Assembly sta portando è quella di poter supportare applicazioni molto pesanti a livello di calcolo, come Photoshop o videogiochi, direttamente nel browser, senza dover scaricare ed installare alcun software.

Essendo uno standard open source, il team di Dart sta lavorando a stretto contatto per far si che Dart possa essere uno dei primi linguaggi con un Garbage Collector (come Java, Python, e non come C, C++) supportati da Web Assembly.

Qual è il vantaggio di poter compilare codice Dart per Web Assembly?

Flutter nativo sul Web!

Essendo Flutter nient'altro che un framework scritto in Dart e C++, questo permetterebbe di compilare e far girare nativamente le app all'interno del browser, con una riduzione considerevole del peso delle app prodotte con Flutter Web e con prestazioni ancora migliori.

## Material 3

Lo scorso anno è stata annunciata la migrazione alle linee guida descritte dalla Material 3 e i componenti sono stati aggiornati di conseguenza.

Con il nuovo anno e nuovi aggiornamenti alle linee guida sono arrivati i refresh dei componenti, oltre ad alcuni nuovi, che seguono l'ormai classico tema di Google per Android.

In particolare, per abilitare l'uso delle nuove linee guida è necessario impostare a "true" l'attributo "useMaterial3" sul nostro ThemeData:

MaterialApp( theme: ThemeData( useMaterial3: true, colorSchemeSeed: Colors.green, ), );
dart

Nel pezzo di codice in alto si può anche notare l'attributo "colorSchemeSeed":

questo serve a far generare un'intera palette di colori in automatico a Flutter. Nel caso volessimo invece specificare una palette nostra, esiste uno strumento messo a disposizione ufficialmente dalle linee guida Material: (https://m3.material.io/theme-builder#/custom.

## Novità per Flutter iOS e Desktop

Le novità che ho ritenuto più interessanti sono state l'introduzione di un "linter" (ovvero un programma che controlla la presenza di errori) per quando rilasciamo app per iOS e l'introduzione di nuovi componenti per arricchire l'interazione con l'utente nelle nostre app.

Il linter in questione è un progetto molto interessante. Coloro che hanno provato a rilasciare app per iOS sanno benissimo quanto Apple sia severa sulla presenza di tutti i metadati e permessi necessari per la pubblicazione.

Questo linter ha l'obiettivo di avvisarci sulla presenza di errori prima ancora di provare la pubblicazione sull'Apple Store, permettendoci di accellerare il processo di pubblicazione:

I componenti invece che ho trovato più interessanti sono stati il "ContextMenu", che ci permette di creare dei popoup constestuali a seconda di quello che l'utente sta svolgendo:

E il "AnimatedGrid" che permette di creare griglie di componenti con animazioni di entrata ed uscita in maniera estremamente semplice:

Oltre a questo, sono stati introdotte varie migliorie sullo scrolling e sull'interattività attraverso il TrackPad per MacOS.

## Dart 3.0 (alpha)

Ormai sono lontati i giorni in cui Dart brancolava nel buio cercando di essere un linguaggio di programmazione simile a JavaScript.

Nel corso degli anni, ed attraverso il coinvolgimento con Flutter che nel frattempo è esploso in popolarità, anche Dart si è evoluto sino ad arrivare ad essere un linguaggio che può essere tranquillamente definito tra i più moderni presenti sul mercato, assieme a TypeScript, Kotlin e Rust.

Con la versione 2 di Dart avevamo avuto l'introduzione della Null Safety, ovvero le variabili che possono contenere un valore nullabile sono obbligate ad indicarlo nel loro tipo:

La versione 3.0 non è ancora disponibile, ma lo sarà a breve; i più curiosi la possono già testare attraverso il canale Dev (https://dart.dev/get-dart/archive#dart-3-alpha).

Le novità più interessanti sono:

  • Il supporto di Record (chiamati anche Tuple in altri linguaggi), che sono molto simili alle liste ma più performanti a livello di computazione, e simulano la possibilià di ritornare più argomenti da funzioni:

    (double x, double y) geoLocation(String name) { if (name == 'Nairobi') { return (-1.2921, 36.8219); } else { ... } } final (lat, long) = geoLocation('Nairobi'); print('Current location: $lat, $long');
    dart
  • L'introduzione di pattern matching, sia a livello di assegnamento di una variabile, sia a livello di switch case:

    sealed class Shape {} class Square implements Shape { final double length; Square(this.length); } class Circle implements Shape { final double radius; Circle(this.radius); } double calculateArea(Shape shape) => switch (shape) { Square(length: var l) => l * l, Circle(radius: var r) => math.pi * r * r };
    dart

## Conclusioni

Questo è stato un grande Flutter Forward!

Il fatto che il focus principale sia passato dalle API e dall'estetica del framework al suo engine e linguaggio di programmazione indica il raggiungimento di un certo grado di maturità.

La scommessa che Google e l'intera community Flutter sta facendo è che questo framework divenga, ancora più di adesso, uno standard del settore per sviluppare qualsiasi tipo di applicazione, che sia Mobile, Web o Desktop.

Ci arrivano notizie anche di aziende italiane che hanno o stanno adottando Flutter nell'ultimo anno (ad es. Banca Sella, Soundreef ed Enel X).

Questo non può far altro che confermare le nostre aspettative sul futuro di questo framework. Noi, con Fudeo, continueremo a lavorare duramente per diffondere il grande potenziale di Flutter tra gli sviluppatori italiani.

Se vuoi approfondire gli argomenti di questo blog post, ti lasciamo qui i link ai 2 annunci ufficiali:

## Nota per i corsisti Fudeo

Forse ti starai chiedendo in che modo le novità presentate impattano sui nostri corsi.

Per chiarezza e trasparenza, tutto ciò che è stato presentato migliora l’architettura di base di Flutter ed arricchisce il numero di componenti che abbiamo a disposizione.

Essendo dunque materiale aggiuntivo, tutto ciò che è presente nei nostri corsi è ancora valido.