Articoli di programmazione

Introduzione a Flutter

Breve introduzione per capire cosa è Flutter prima di affondarci i denti

flutter.png
Flutter è un framework open source creato da Google per lo sviluppo di applicazioni mobile, web e desktop. È stato presentato per la prima volta nel 2017 ed è diventato rapidamente uno dei framework più popolari tra gli sviluppatori.

Ma cos'è #Flutter e perché è così popolare? In questo articolo, esploreremo i concetti di base di Flutter e i motivi per cui è una scelta così attraente per lo sviluppo di applicazioni.

Flutter è un framework basato sul linguaggio di programmazione Dart, anch'esso sviluppato da Google. Dart è un linguaggio orientato agli oggetti che combina elementi di sintassi di linguaggi come Java e JavaScript. È stato progettato per la creazione di applicazioni client-side e server-side e fornisce un ambiente di sviluppo integrato (IDE) denominato "DartPad", oppure puoi usare Visual Studio Code o altri IDE.

Uno dei principali vantaggi di #Flutter è la sua capacità di creare interfacce utente (UI) attraenti e reattive. Flutter utilizza un sistema di widget che consente agli sviluppatori di creare interfacce utente personalizzate e di alta qualità. I widget di Flutter possono essere facilmente personalizzati per adattarsi alle esigenze del progetto, e gli sviluppatori possono creare widget personalizzati per soddisfare esigenze specifiche.

#Flutter utilizza anche il concetto di "hot reload", che consente agli sviluppatori di vedere i cambiamenti apportati all'applicazione in tempo reale. Questo significa che gli sviluppatori possono sperimentare rapidamente con le modifiche dell'interfaccia utente e migliorare l'esperienza utente in modo più efficiente.

Un altro vantaggio di #Flutter è la sua capacità di creare applicazioni cross-platform. Ciò significa che gli sviluppatori possono creare un'applicazione una sola volta e distribuirla su diverse piattaforme come iOS, Android e web. Questo riduce i costi di sviluppo e rende più facile la gestione delle applicazioni.

#Flutter è anche molto popolare tra gli sviluppatori per la sua vasta libreria di pacchetti e plug-in. Ci sono molti pacchetti di terze parti disponibili per Flutter che consentono agli sviluppatori di aggiungere funzionalità avanzate all'applicazione, come la gestione dei file, la crittografia, l'autenticazione degli utenti e molto altro.

In sintesi, #Flutter è un framework di sviluppo di applicazioni cross-platform altamente personalizzabile e reattivo che consente agli sviluppatori di creare interfacce utente di alta qualità e applicazioni avanzate.

Vediamo un primo esempio semplicissimo:

import 'package:flutter/material.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Hello World',
home: Scaffold(
appBar: AppBar(
title: Text('Hello World'),
),
body: Center(
child: Text('Ciao mondo!'),
),
),
);
}
}


In questo codice, stiamo importando il pacchetto flutter/material.dart che ci consente di utilizzare i widget di Material Design forniti da Flutter. Stiamo anche creando una nuova classe MyApp che estende StatelessWidget.

Nel metodo build della classe MyApp, stiamo restituendo un widget MaterialApp che rappresenta l'applicazione. Stiamo impostando il titolo dell'applicazione su "Hello World" e il widget home su Scaffold, che ci consente di creare un'applicazione con una barra degli strumenti e un corpo.

All'interno del widget Scaffold, stiamo creando un'app bar con il titolo "Hello World" e un widget Center con il testo "Ciao mondo!".

- Salva il file main.dart e avvia l'applicazione. Puoi farlo utilizzando il comando flutter run nella finestra del terminale o facendo clic sul pulsante "Run" nell'IDE.

- Dovresti vedere l'applicazione "Hello World" con il testo "Ciao mondo!" sullo schermo. Congratulazioni, hai scritto il tuo primo programma in Flutter!

Questo è solo un esempio semplice, ma ci sono molti altri widget e funzionalità avanzate che puoi utilizzare per creare applicazioni più complesse.

In Flutter, ci sono due tipi di widget: StatelessWidget e StatefulWidget. La principale differenza tra i due è che i widget Stateless sono immutabili e non possono essere modificati dopo essere stati costruiti, mentre i widget Stateful possono avere un proprio stato interno che può essere modificato durante l'esecuzione dell'app.

StatelessWidget
Un widget Stateless è un widget immutabile che non ha uno stato interno. Quando viene costruito, restituisce un albero di widget basato sui parametri passati in ingresso. Una volta creato, non può più essere modificato. Questo tipo di widget è utile quando l'applicazione non ha bisogno di cambiare dinamicamente il suo contenuto o quando il contenuto non dipende da alcuno stato interno.

Esempio di StatelessWidget:

class HelloWidget extends StatelessWidget {
final String name;

const HelloWidget({Key? key, required this.name}) : super(key: key);

@override
Widget build(BuildContext context) {
return Text('Hello $name');
}
}


In questo esempio, HelloWidget è un widget Stateless che riceve un parametro name nel suo costruttore e restituisce un widget Text che mostra il messaggio "Hello" concatenato con il nome ricevuto in input.

StatefulWidget
Un widget Stateful è un widget che ha uno stato interno che può cambiare durante l'esecuzione dell'app. Il widget viene creato una sola volta e il suo stato viene mantenuto e aggiornato quando necessario. Questo tipo di widget è utile quando l'applicazione deve cambiare dinamicamente il suo contenuto o quando il contenuto dipende da uno stato interno.

Esempio di StatefulWidget:

class CounterWidget extends StatefulWidget {
const CounterWidget({Key? key}) : super(key: key);

@override
_CounterWidgetState createState() => _CounterWidgetState();
}

class _CounterWidgetState extends State {
int _counter = 0;

void _incrementCounter() {
setState(() {
_counter++;
});
}

@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text('Counter value: $_counter'),
ElevatedButton(
onPressed: _incrementCounter,
child: const Text('Increment Counter'),
),
],
);
}
}



In questo esempio, CounterWidget è un widget Stateful che mostra un valore di contatore che può essere incrementato premendo un pulsante. Il valore di contatore viene mantenuto come stato interno del widget e viene aggiornato quando l'utente preme il pulsante. La chiamata al metodo setState indica a Flutter che lo stato del widget è cambiato e che è necessario ricostruire il widget con il nuovo stato.

In generale, utilizza un widget Stateless quando non hai bisogno di cambiare il suo contenuto dinamicamente e utilizza un widget Stateful quando devi gestire uno stato interno che può cambiare durante l'esecuzione dell'app.