Comment utiliser SharedPreferences pour stocker les paramètres de l'application avec Flutter – CloudSavvy IT
Agence web » Actualités du digital » Comment utiliser SharedPreferences pour stocker les paramètres de l’application avec Flutter – CloudSavvy IT

Comment utiliser SharedPreferences pour stocker les paramètres de l’application avec Flutter – CloudSavvy IT

SharedPreferences est un module apportant la fonctionnalité de l’API éponyme d’Android à vos applications Flutter multiplateformes. Il utilise l’API NSUserDefaults similaire d’Apple lors de l’exécution sur iOS et macOS. Les implémentations sont également incluses pour Linux et Windows afin qu’elles fonctionnent partout où les applications Flutter le peuvent.

Dans ce guide, nous montrerons comment vous pouvez utiliser SharedPreferences pour conserver des paramètres simples dans votre application. Le module est mieux utilisé pour les petits éléments d’état non essentiels tels que les préférences de l’utilisateur, les signets enregistrés et les valeurs de configuration mises en cache envoyées par un serveur.

Ajout de préférences partagées

Ajoutez le module SharedPreferences à votre application à l’aide de la CLI Flutter pub add commander:

flutter pub add shared_preferences

Référencez la bibliothèque dans votre code en l’important en haut de vos fichiers Dart :

import 'package:shared_preferences/shared_preferences.dart';

Vous pourrez accéder au SharedPreferences API dans les fichiers qui incluent ceci import déclaration.

Ajout de données aux préférences partagées

Pour commencer à utiliser SharedPreferences, vous devez d’abord obtenir une instance de SharedPreferences classe connectée au fichier de configuration sur disque de votre application. Appeler le getInstance() méthode statique pour charger et analyser le fichier dans un SharedPreferences exemple. Il s’agit d’une méthode asynchrone, utilisez donc la await mot-clé à l’intérieur d’un async fonction de rationalisation de l’accès.

void main() async {
    var prefs = await SharedPreferences.getInstance();
}

Maintenant, vous pouvez utiliser les méthodes de prefs instance pour stocker et récupérer vos données. SharedPreferences fonctionne avec des paires clé-valeur. Il prend en charge cinq types de données : int, String, bool, doubleet List<String>. Les valeurs sont ajoutées au magasin à l’aide de méthodes de définition ; chaque méthode prend un nom de clé comme premier paramètre et une valeur comme second :

prefs.setBool("darkTheme", true);

Pour travailler avec d’autres types de valeur, appelez leurs méthodes setter correspondantes :

prefs.setString("theme", "dark");
 
prefs.setInt("sessionId", 1000);
 
prefs.setDouble("lastTemperature", 18.5);
 
prefs.setStringList("featureFlags", ["darkTheme", "redesign"]);

Les setters n’acceptent pas null comme valeur. Utilisez le séparé remove() méthode pour supprimer un article de la boutique :

prefs.remove("sessionId");

Pour supprimer tous les paramètres enregistrés, appelez le clear() méthode. Les effacements sont des opérations asynchrones qui se résolvent lorsque le fichier de paramètres sur disque a été supprimé.

Types complexes

Vous ne pouvez pas conserver nativement des types complexes tels que des objets, des cartes et des listes non-chaînes. Pour stocker l’un d’entre eux, vous pouvez l’encoder en JSON et utiliser le setString() méthode:

import 'dart:convert';
import 'package:shared_preferences/shared_preferences.dart';
 
void main () async {
    var bookmarkedArticles = [10, 15, 18];
    var prefs = await SharedPreferences.getInstance();
    prefs.setString("bookmarks", jsonEncode(bookmarkedArticles));
}

Appel jsonDecode() lorsque vous récupérez la valeur avec getString() (voir ci-dessous) pour le reconvertir en un type de fléchette approprié.

Récupération de données persistantes

Les valeurs sont récupérées à l’aide de méthodes getter. Comme avec les setters, il existe un getter unique pour chaque type de données pris en charge. Cela signifie que vous pouvez utiliser en toute sécurité les valeurs de retour sans avoir à transtyper manuellement entre les types.

var theme = prefs.getString("theme");
// "dark"
 
var sessionId = prefs.getInt("sessionId");
// 1000
 
var lastTemperature = prefs.getDouble("lastTemperature");
// 18.5

Il est important que vous utilisiez le getter qui correspond au type de données de la valeur stockée. Si la clé correspond mais qu’elle a un type de données différent, une exception sera levée.

Null est renvoyé lorsque la clé n’existe pas dans les données enregistrées. Vous pouvez vérifier à l’avance si un article est en magasin en appelant containsKey():

if (prefs.containsKey("theme")) {
    // ...
}

Vous pouvez également énumérer toutes les clés du magasin :

var keys = pref.getKeys();

Ceci est utile lorsque vous avez besoin de savoir ce qui est actuellement enregistré sur le disque afin de pouvoir exécuter les migrations appropriées après une mise à jour de l’application.

Mises en garde et limites

SharedPreferences est facile à utiliser lorsque vous stockez des paires clé-valeur simples. Cependant, vous ne devriez pas vous y fier pour des données critiques ou des valeurs sensibles à la sécurité.

Les implémentations spécifiques à la plate-forme varient, mais vous devez supposer que vos données seront stockées en texte brut dans un emplacement potentiellement accessible à l’utilisateur. Le chiffrement des valeurs avant de les enregistrer peut renforcer la protection, mais laissera toujours les clés exposées.

SharedPreferences est une API asynchrone. Bien que les méthodes getter et setter semblent être synchrones, cela ne s’étend pas jusqu’au niveau du disque. Les écritures sur disque peuvent être asynchrones. La fermeture de l’application immédiatement après avoir défini une valeur peut entraîner sa perte.

Il est préférable de choisir une API différente lorsque vous stockez de grandes quantités de données, écrivez des valeurs complexes ou avez besoin d’un modèle d’exploitation plus fiable avec une gestion des erreurs résiliente. Vous pouvez utiliser l’API Files pour écrire un fichier de configuration personnalisé dans un emplacement restreint ou créer une base de données SQLite pour votre application. Cette dernière approche est idéale lorsque vous souhaitez effectuer des requêtes avancées sur les données stockées.

Rédaction de tests unitaires

SharedPreferences inclut un utilitaire pour vous aider à écrire des tests unitaires sans véritable magasin de préférences. Le statique setMockInitialValues() La méthode vous permet d’injecter des valeurs qui rempliront l’instance renvoyée par getInstance():

void main() async {
 
    Map<String, Object> values = <String, Object>{"foo": "bar"};
    SharedPreferences.setMockInitialValues(values);
 
    var instance = await SharedPreferences.getInstance();
    var foo = instance.getString("foo");
    // bar
 
}

Vous pouvez ajouter des paramètres à votre application tout en conservant votre capacité à tester unitairement chaque composant. Tester le code qui récupère vos paramètres vous permet de garantir que l’application se comportera correctement dans chaque scénario.

Sommaire

SharedPreferences est un moyen pratique de conserver un état simple dans votre application Flutter. Il se concentre sur le stockage et la récupération de paires clé-valeur à l’aide des types de données les plus courants. SharedPreferences est mieux utilisé pour les paramètres non essentiels où un échec d’écriture n’aura pas d’impact négatif sur votre application.

Il peut être efficace d’exploiter SharedPreferences de la même manière que les cookies dans les applications Web. Les compteurs de base, les valeurs booléennes et les clés de configuration ont un sens dans SharedPreferences ; tout le reste appartient à une structure de données bien définie que vous pouvez gérer plus précisément.