Cet article décrit la notion de Préférences partagées (Shared Preferences) qui permet à une application Flutter (Android ou iOS) d’enregistrer les paramètres, propriétés, données sous la forme de paires clé-valeur qui persisteront même lorsque l’utilisateur ferme l’application.

Difficulté: Débutant

Les Shared Preferences sont stockées en format XML.

Les Shared Preferences sont spécifiques à l’application, en d’autres termes, les données sont perdues en réalisant une des opérations suivantes:

  • en désinstallant l’application
  • en supprimant les données privées de l’application

Utilisation principale

L’utilisation principale de Shared Preferences est de sauvegarder les préférences de l’utilisateur, les paramètres, peut-être les données (si elles ne sont pas trop grandes) de sorte que la prochaine fois que l’application est lancée, ces informations peuvent être récupérées et utilisées.

Aperçu de l’API

La documentation complète peut être trouvée sous Flutter packages repository.

1. Getters

Set < String > getKeys() Retourne toutes les clés (=keys)

dynamic get(String key) Retourne la valeur associée à une clé (key)

bool getBool(String key) Retourne un booléen, associé à la clé correspondante. Si la valeur n’est pas un booléen, une exception est lancée.

int getInt(String key) Retourne un entier, associé à la clé correspondante. Si la valeur n’est pas un entier, une exception est lancée.

double getDouble(String key) Retourne une valeur décimale, associée à la clé correspondante. Si la valeur n’est pas décimale, une exception est lancée.

String getString(String key) Retourne une chaîne de caractères, associée à la clé correspondante. Si la valeur n’est pas une chaîne de caractères, une exception est lancée.

List getStringList(String key) Retourne un ensemble (=set) de chaînes de caractères, associé à la clé correspondante. Si la valeur n’est pas un ensemble de chaînes de caractères, une exception est lancée.

2. Setters

Future < bool > setBool(String key, bool value) Sauve un booléen, associé à une clé.

Future < bool > setInt(String key, int value) Sauve un entier, associé à une clé.

Future < bool > setDouble(String key, double value) Sauve une valeur décimale, associée à une clé.

Future < bool > setString(String key, String value) Sauve une chaîne de caractères, associée à une clé.

Future < bool > setStringList(String key, List value) Sauve une liste de chaînes de caractères, associée à une clé.

3. Suppression

Future < bool > remove(String key) Supprime la paire clé-valeur associée à la clé.

A noter: si dans un setter vous passez une valeur null, ceci correspond à appeler un remove(key)”.

Future < bool > clear async Supprimer toutes les paires clé-valeur liées à l’application.

Comment utiliser ?

pubspec.yaml

Ajoutez au ficher pubspec.yaml le package shared_preferences à la liste des dépendences, comme suit:

dependencies:
  flutter:
    sdk: flutter

  flutter_localizations:
    sdk: flutter
    
  shared_preferences: ^0.4.2

En pratique

Le code suivant simule une classe qui doit traiter une préférence d’utilisateur (par exemple, autoriser les notifications, ordre de tri)

import 'package:shared_preferences/shared_preferences.dart'

class SharedPreferencesTest {
  ///
  /// Instantiation of the SharedPreferences library
  ///
  final String _kNotificationsPrefs = "allowNotifications";
  final String _kSortingOrderPrefs = "sortOrder";

  /// ------------------------------------------------------------
  /// Method that returns the user decision to allow notifications
  /// ------------------------------------------------------------
  Future<bool> getAllowsNotifications() async {
	final SharedPreferences prefs = await SharedPreferences.getInstance();

  	return prefs.getBool(_kNotificationsPrefs) ?? false;
  }

  /// ----------------------------------------------------------
  /// Method that saves the user decision to allow notifications
  /// ----------------------------------------------------------
  Future<bool> setAllowsNotifications(bool value) async {
	final SharedPreferences prefs = await SharedPreferences.getInstance();

	return prefs.setBool(_kNotificationsPrefs, value);
  }

  /// ------------------------------------------------------------
  /// Method that returns the user decision on sorting order
  /// ------------------------------------------------------------
  Future<String> getSortingOrder() async {
	final SharedPreferences prefs = await SharedPreferences.getInstance();

	return prefs.getString(_kSortingOrderPrefs) ?? 'name';
  }

  /// ----------------------------------------------------------
  /// Method that saves the user decision on sorting order
  /// ----------------------------------------------------------
  Future<bool> setSortingOrder(String value) async {
	final SharedPreferences prefs = await SharedPreferences.getInstance();

	return prefs.setString(_kSortingOrderPrefs, value);
  }
}

Conclusions

Comme vous pouvez le voir, l’utilisation de cette librairie est facile.

Le code ci-dessus est uniquement destiné à montrer comment l’utiliser. En pratique, il est plus probable que vous n’ayez pas un getter / setter par paramètre…

Gardez à l’esprit que les données gérées par Shared Preferences ne sont pas cryptées donc, il n’est pas recommandé de mettre des données sensibles, comme un mot de passe par exemple.

Restez à l’écoute de nouveaux articles et bon codage.


Cet article est également publié en Anglais sur Medium - Flutter Community