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

Memoria interna

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

Lista di opzioni

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.