web-dev-qa-db-fra.com

Flutter: préférences partagées

J'ai cette fonction:

  Future<String> load(SharedPreferences prefs, String fileName) async {
    prefs = await SharedPreferences.getInstance();
    String jsonString = prefs.getString(fileName) ?? "";
    if (jsonString.isNotEmpty) {
      return jsonString;
    }else{
      return ...
    }
  }

Que dois-je retourner dans le cas contraire? J'ai essayé avec "" mais ça ne marche pas. 

6
Little Monkey

La réponse est "ça dépend". Cela dépend de ce que vous faites exactement avec le résultat de cette fonction et de ce qu’une bonne valeur par défaut vide signifie dans ce contexte.

En supposant que vous décodiez la chaîne JSON renvoyée en Map<String, dynamic>, une bonne valeur par défaut pourrait être la carte vide. Dans ce cas, vous pouvez reformuler votre fonction comme suit:

Future<String> loadJSON(final String fileName) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String jsonString = prefs.getString(fileName);
  if (jsonString != null && jsonString.isNotEmpty) {
    return jsonString;
  }
  return "{}"; // default value
}

final String jsonString = await loadJSON("test.json");

final Map<String, dynamic> jsonData = json.decode(jsonString);

Cependant, il est probablement plus judicieux de reformuler cette procédure en une fonction légèrement supérieure renvoyant les valeurs de carte réelles:

Future<Map<String, dynamic>> loadData(final String fileName) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String jsonString = prefs.getString(fileName);
  if (jsonString != null && jsonString.isNotEmpty) {
    return json.decode(jsonString);
  }
  return Map(); // default value
}

final Map<String, dynamic> jsonData = await loadData("test.json");
3
Arto Bendiken

Ceci est une réponse plus générale pour les futurs visiteurs.

Préférences partagées

Dans Flutter, les préférences partagées servent à stocker des données primitives (int, double, bool, string et stringList). Ces données sont associées à l'application. Ainsi, lorsque l'utilisateur désinstalle votre application, les données sont également supprimées.

Obtenir le plugin

Le plugin shared_preferences de pub est un wrapper autour de Android SharedPreferences et iOS NSUserDefaults. Vous pouvez obtenir ce plugin en ajoutant la ligne shared_preferences à votre fichier pubspec.yaml dans la section dependencies.

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.4.3

Remplacez le numéro de version par le numéro actuel .

Importer le package

Quel que soit le fichier dont vous avez besoin des Préférences partagées, ajoutez l'importation suivante:

import 'package:shared_preferences/shared_preferences.Dart';

Lecture et écriture de données

Pour obtenir l'objet de préférences partagées, vous pouvez effectuer les opérations suivantes:

final prefs = await SharedPreferences.getInstance();

Ceci sera utilisé pour tous les exemples suivants.

int

  • read: final myInt = prefs.getInt('my_int_key') ?? 0;
  • write: prefs.setInt('my_int_key', 42);

double

  • read: final myDouble = prefs.getDouble('my_double_key') ?? 0.0;
  • write: prefs.setDouble('my_double_key', 3.14);

bool

  • read: final myBool = prefs.getBool('my_bool_key') ?? false;
  • write: prefs.setBool('my_bool_key', true);

chaîne

  • read: final myString = prefs.getString('my_string_key') ?? '';
  • write: prefs.setString('my_string_key', 'hello');

stringList

  • read: final myStringList = prefs.getStringList('my_string_list_key') ?? [];
  • write: prefs.setStringList('my_string_list_key', ['horse', 'cow', 'sheep']);

Voir également

1
Suragch