Introduzione
L'introduzione del null-safety ha creato diverse problematiche sui progetti esistenti ma ha migliorato le prestazioni e costretto noi programmatori a seguire questa logica che porta inevitabilmente a commettere meno errori.
In questo articolo voglio parlare di come strutturare un nuovo progetto, Flutter non impone una struttura, ma con il tempo in azienda, abbiamo creato una nostra convenzione che ci aiuta nello sviluppo.
Provider
Organizzazione delle cartelle
Nei seguenti capitoli spiego un po' più nel dettaglio cosa si prevede di inserire nelle singole cartelle.
Cartella api
Cartella providers
return MultiProvider( providers: [ Provider<PreferencesProvider>(create: (_) => PreferencesProvider()), Provider<ApiProvider>(create: (_) => ApiProvider()), ... ], child: MyApp());
Cartella Models
Cartella pages
Qui vanno ad essere inserite le singole schermate dell'applicazione.
Il codice di seguito proposto sfrutta la libreria freezed, che permette di creare una classe le cui variabili una volta definite risultano final. L'instanza di una classe freezed non può essere modificata se non creandone una copia.
Questa libreria se accoppiata alla libreria state_notifier assicura che lo state sia immodificabile se non con la creazione di una nuova istanza.
La logica può sembrare inizialmente complessa ma dopo qualche utilizzo la sua gestione risulta molto comoda.
Per ogni pagina deve essere creata una sotto cartella che conterrà tre file (più uno generato da freezed):
Lo state: una classe che conterrà la lista degli stati possibili della pagina
- Il VM: è la classe che gestisce lo stato della vista, viene definito uno stato iniziale e l'interazione dell'utente con la vista può scatenare eventi che richiamano il VM per aggiornarne lo stato
- la page: la classe che gestisce la vista, questa avrà a monte definito uno StateNotifierProvider che andrà ad inizializzare il VM. Tramite il metodo watch è possibile dire che elementi andrà a visualizzare la vista.
Flutter Setting di un nuovo progetto