Talvolta capita di dover salvare dei dati direttamente sulla memoria del dispositivo e non su un database. In questo articolo vedremo come si può fare in Flutter utilizzando le Shared Preferences.
Il pacchetto SharedPreferences
Per poter salvare le preferenze dell’App sulla memoria locale del dispositivo in Flutter si utilizza il pacchetto SharedPreferences.
Link al repository: https://pub.dev/packages/shared_preferences
Come installare il pacchetto?
Per prima cosa bisogna inserire il pacchetto tra i plugin nel file pubspec.yaml
dependencies:
flutter:
sdk: flutter
shared_preferences: "numero-ultima-versione"
In cima al file dart in cui vogliamo utilizzare le SharedPreferences dobbiamo dichiarare il pacchetto tra le librerie importate:
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
Il tipo dei dati che si possono salvare
Con questo pacchetto i dati vengono salvati come una coppia di (<chiave>,<valore>) ed i tipi di dati supportati sono i seguenti: int, double, bool, String e StringList.
Le operazioni supportate dalle Shared Preferences
Questo pacchetto supporta tre tipi di operazioni:
Leggi il dato dalla memoria interna
Il metodo con cui si legge una SharedPreferences salvata varia seconda del tipo di dato che si vuole leggere. Può essere getInt(), getBool(), getString() o getStringList().
Vediamo un esempio con getStringList():
//definiamo la variabile per accedere alle SharedPreferences
final prefs = await SharedPreferences.getInstance();
//Recuperiamo le preferenze e le inseriamo in una lista di stringhe
List prefList = prefs.getStringList("prefListInStorage");
N.B: Ovviamente se non abbiamo mai salvato nessuna preferenze in memoria questa lista sarà null.
Salva il dato nella memoria interna
Il metodo con cui si salva una SharedPreferences varia seconda del tipo di dato che si vuole leggere. Può essere setInt(), setBool(), setString() o setStringList().
Vediamo un esempio con setStringList():
//definiamo la variabile per accedere alle SharedPreferences
final prefs = await SharedPreferences.getInstance();
//Recuperiamo le preferenze e le inseriamo in una lista di stringhe
List prefList = prefs.getStringList("prefListInStorage");
//varie operazioni sulla lista
//aggiorno il valore della lista nelle SharedPreferences
prefs.setStringList("prefListInStorage",prefList)
Ogni volta che si effettuano variazioni su un dato che appartiene ad una SharedPreferences bisogna salvare il suo nuovo valore in memoria.
Rimuovi il dato dalla memoria interna
Il metodo con cui si rimuove una SharedPreferences è univoco e si chiama remove().
Vediamo un esempio:
//definiamo la variabile per accedere alle SharedPreferences
final prefs = await SharedPreferences.getInstance();
//Recuperiamo le preferenze e le inseriamo in una lista di stringhe
List prefList = prefs.getStringList("prefListInStorage");
//varie operazioni sulla lista
//Rimuovo la lista dalle SharedPreferences
prefs.remove("prefListInStorage");
Vediamo un esempio pratico: Le opzioni di un’App
Mettiamo caso di avere un’App con una lista di opzioni che un utente può scegliere.
Queste opzioni possono essere salvate in locale tramite una SharedPreferences e aggiornate ogni volta che l’utente le modifica.