Lezione 7 – State Management in Flutter: Riverpod e ChangeNotifier spiegati bene

La gestione dello stato è il punto in cui molte app Flutter iniziano a degradare.

All’inizio tutto funziona:

  • qualche setState
  • un paio di variabili locali
  • UI che si aggiorna correttamente

Poi l’app cresce.

Arrivano:

  • API
  • loading multipli
  • errori
  • flussi complessi
  • più schermate che condividono dati

Ed è lì che diventa chiaro un fatto fondamentale:

Lo stato non è un dettaglio di implementazione.
È una decisione architetturale.

Con la Lezione 7 del corso Flutter affrontiamo questo tema in modo strutturato, pratico e orientato alla produzione.

📺 Video Lezione 7 (YouTube)
👉 (inserisci qui il link YouTube della Lezione 7)

📁 Slide e appunti della lezione
https://drive.google.com/file/d/1huzk8B2SWdNyV6rA5_2e7c3le39GO1vR/view?usp=sharing


Cos’è lo stato in una app Flutter

In termini pratici, lo stato è qualsiasi dato che può cambiare nel tempo e che influisce sulla UI.

Esempi:

  • dati caricati da una API
  • stato di loading
  • errori
  • input dell’utente
  • autenticazione
  • selezioni, filtri, toggle

Il problema non è avere stato.
Il problema è dove vive e chi lo controlla.


Il primo errore: stato nella UI

Molte app iniziano così:

class MyPage extends StatefulWidget {
  @override
  State<MyPage> createState() => _MyPageState();
}

class _MyPageState extends State<MyPage> {
  bool isLoading = false;
  String? error;
}

All’inizio sembra corretto.
Poi iniziano i problemi:

  • lo stato è duplicato in più widget
  • la logica cresce dentro la UI
  • diventa difficile testare
  • ogni modifica rompe qualcos’altro

La UI finisce per decidere, invece di mostrare.


Principio chiave: separazione delle responsabilità

Un principio fondamentale che introduciamo nella Lezione 7 è questo:

  • la UI osserva
  • la logica decide
  • lo stato vive fuori dalla UI

Questo principio è alla base di:

  • MVVM
  • Riverpod
  • architetture scalabili

Provider, Riverpod e ChangeNotifier: chiarire i ruoli

In Flutter esistono diversi strumenti che spesso vengono confusi.

Provider

È stato uno dei primi approcci diffusi per:

  • dependency injection
  • state management

Funziona, ma ha limiti strutturali (dipendenza dal BuildContext, difficoltà di test).

Riverpod

Riverpod nasce per risolvere questi limiti.

Non è “solo” uno state manager.
È:

  • dependency injection
  • gestione dello stato
  • lifecycle controllato

Senza dipendere dal contesto UI.

ChangeNotifier

ChangeNotifier non è sbagliato.


È uno strumento semplice per gestire stato mutabile,
ma va usato nel posto giusto.

Come funziona Riverpod (modello mentale)

Nella lezione introduciamo i concetti chiave:

ref.read(provider);    // leggi una volta
ref.watch(provider);   // osservi e ricostruisci la UI
ref.listen(provider);  // reagisci ai cambiamenti
ref.select(...);       // osservi solo una parte

La differenza non è sintattica.
È comportamentale.

Capire quando usare ciascuno di questi metodi
evita:

  • rebuild inutili
  • side effect
  • accoppiamenti sbagliati

Riverpod + ChangeNotifier: usarli insieme (bene)

Uno dei punti centrali della Lezione 7 è mostrare come combinare:

  • Riverpod per fornire dipendenze
  • ChangeNotifier per gestire stato mutabile

Esempio concettuale:

final counterProvider =
    ChangeNotifierProvider((ref) => CounterViewModel());

Dove:

  • Riverpod gestisce il lifecycle
  • il ViewModel incapsula la logica
  • la UI osserva senza conoscere i dettagli

Questo approccio:

  • resta semplice
  • scala bene
  • si integra perfettamente con MVVM

State management in MVVM

Nel pattern MVVM:

  • View → mostra dati
  • ViewModel → gestisce stato e logica
  • Service/Repository → dati esterni

La Lezione 7 mostra come:

  • collegare View e ViewModel
  • evitare logica nella UI
  • mantenere il controllo del flusso

Questo passaggio è cruciale per:

  • testabilità
  • manutenibilità
  • evoluzione del progetto

Errori comuni nello state management Flutter

Durante la lezione vengono analizzati errori reali, molto frequenti:

  • stato duplicato in più provider
  • provider globali senza motivo
  • UI che conosce dettagli di business
  • ViewModel che dipendono dalla UI

Riconoscere questi errori prima
fa risparmiare ore (o giorni) di refactor.


Dove mettere i provider nel progetto

Una domanda tipica è:
“in che cartella metto i provider?”

La risposta corretta è:
dipende dalla responsabilità, non dalla moda.

La lezione mostra come:

  • organizzare i provider per feature
  • mantenere il progetto leggibile
  • prepararlo alle lezioni successive

Il corso Flutter gratuito

La Lezione 7 fa parte di un corso Flutter che stiamo pubblicando gratuitamente su YouTube.

Caratteristiche:

  • registrazioni reali di un corso live
  • una lezione a settimana
  • approccio da produzione
  • niente scorciatoie

📺 Video completo della lezione 7 del corso Flutter gratuito


Conclusione

Lo state management non è una scelta “di stile”.
È una decisione strutturale.

La Lezione 7 fornisce:

  • un modello mentale corretto
  • strumenti pratici
  • basi solide per crescere

Se Flutter è uno strumento di lavoro per te,
questa lezione non è opzionale.

Condividi il post:

Leggi anche