Flutter – Preferencias compartidas

SharedPreference es un pequeño almacenamiento de datos en nuestro teléfono donde podemos almacenar datos en pares de claves y valores. Podemos almacenar un número entero, una string, una lista de strings, un valor booleano y un doble en SharedPreferences. Ahora analicemos dónde podemos implementarlos. El primero es guardar la información del usuario si el usuario inició sesión o no, cualquier identificación o algunos detalles básicos del usuario para que los usuarios no tengan que iniciar sesión nuevamente cada vez que un usuario abre esa aplicación.

Biblioteca shared_preferences en Flutter

1. Agregue el paquete al archivo pubspec.yaml. Consulte este artículo: Cómo configurar SharedPreferences en Flutter

2. Defina strings en un archivo constante para establecer y obtener valor en esa clave en particular (este paso no es obligatorio, puede omitirlo y puede agregarlo directamente donde lo necesite).

const String key="myKey";

3. En primer lugar, debe crear una instancia de preferencia compartida y almacenarla en una variable.

final prefs = await SharedPreferences.getInstance();

4. Usando preferencias, puede acceder a muchas funciones para configurar y obtener datos en diferentes tipos de datos.

E.g. prefs.getBool(key), prefs.getInt(key) ,etc.

5. La clave debe ser la misma tanto en getter como en setter para obtener el valor de esa clave en particular. como abajo

5. 1. Tipo de datos bool

Captador:- prefs.getBool(clave) ?? false,
Setter:- prefs.setBool(clave, valor)
Valor — true,false

Código:

const boolSharedPreference = "bool shared preferences";  
static Future getBool() async {
   final prefs = await SharedPreferences.getInstance();
   prefs.setBool(boolSharedPreference, true);
 }
 static Future<bool> setBool() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.getBool(boolSharedPreference) ?? false;
 }

5. 2. Tipo de datos int

Captador:- prefs.getInt(clave) ?? 0,
Setter:- prefs.setInt(clave, valor)
valor -valor entero 1,4566,8423235,

Código:

const intSharedPreference = "integer shared preferences";
  static Future setInt() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.setInt(intSharedPreference, 1);
 }
 static Future<int> getInt() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.getInt(intSharedPreference) ?? 0;
 }

5. 3. Tipo de datos doble

Captador:- prefs.getDouble(clave) ?? 0.0,
Setter: – prefs.setDouble(clave, valor)
valora cualquier valor doble como 2.0,6.7,12344.8

Código:

const doubleSharedPreference = "double shared preferences";
  static Future setDouble() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.setDouble(doubleSharedPreference, 0.0);
 }
 static Future<double> getDouble() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.getDouble(doubleSharedPreference) ?? 0.0;
 }

5. 4. Tipo de datos de string

Captador:- prefs.getString(clave) ?? “”,
Setter:- prefs.setString(clave, valor)
Valor: puede ser cualquier cosa debajo de coma invertida.

Código:

const stringSharedPreference = "string shared preferences";
static Future<String> getString() async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.getString(listSharedPreference) ?? "";
}
static Future setString() async {
  final prefs = await SharedPreferences.getInstance();
  return prefs.setString(stringSharedPreference, "");
}
 

5. 5. Lista de tipo de datos de string

Captador:- prefs.getStringList(clave) ?? [],
Setter:- prefs.setStringList(clave, valor)
Valor -Lista de strings (cualquier cosa debajo de una coma)

Código:

const listSharedPreference = "list shared preferences";

 static Future setListString(
     {required String id, required String token}) async {
   final prefs = await SharedPreferences.getInstance();
   prefs.setStringList(listSharedPreference, [id, token]);
 }
 static Future<List<String>> getListString() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.getStringList(listSharedPreference) ?? [];
 }

5. 6. Tipo de datos Json o mapa

Getter:- json.decode(prefs.getString(key).toString()),
Setter:- prefs.setString(key, jsonEncode(value))
para usar su valor.

// Asignar myData= jsonDecode(value);
valor :- {“nombre”:”risheeta”,
“experiencia”:1.5,
“edad”:21,
“habilidades”:[“aleteo”,”Html”]}

Código:

const mapSharedPreference = "map shared preferences";
  static Future setMap() async {
   final prefs = await SharedPreferences.getInstance();
   return prefs.setString(
       mapSharedPreference,
       jsonEncode({
         "name": "",
       }));
 }
 static Future<Map> getMap() async {
   final prefs = await SharedPreferences.getInstance();
   return jsonDecode(prefs.getString(mapSharedPreference) ?? "") ?? {};
 }

Esta función borrará las preferencias compartidas completas, lo que significa que eliminará todos los pares clave-valor almacenados en la memoria. Puede limpiar esta memoria con esta función. Puede borrar esto desinstalando la aplicación y reinstalándola o limpiando los datos de esa aplicación en particular.

Código:

static Future clearSharedPref() async {
   final prefs = await SharedPreferences.getInstance();
   await prefs.clear();
 }

Dart

import 'dart:convert';
  
import 'package:shared_preferences/shared_preferences.dart';
import 'package:shared_preferences_flutter/constants/value.dart';
  
class SharedPref {
  static Future setBool() async {
    final prefs = await SharedPreferences.getInstance();
    prefs.setBool(boolSharedPreference, true);
  }
  
  static Future<bool> getBool(bool value) async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getBool(boolSharedPreference) ?? false;
  }
  
  static Future setListString(
      {required String id, required String token}) async {
    final prefs = await SharedPreferences.getInstance();
    prefs.setStringList(listSharedPreference, [id, token]);
  }
  
  static Future<List<String>> getListString() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getStringList(listSharedPreference) ?? [];
  }
  
  static Future<String> getString() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getString(listSharedPreference) ?? "";
  }
  
  static Future setString(String value) async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.setString(stringSharedPreference, value);
  }
  
  static Future setInt(int val) async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.setInt(intSharedPreference, val);
  }
  
  static Future<int> getInt() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getInt(intSharedPreference) ?? 0;
  }
  
  static Future setDouble(double val) async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.setDouble(doubleSharedPreference, val);
  }
  
  static Future<double> getDouble() async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.getDouble(doubleSharedPreference) ?? 0.0;
  }
  
  static Future setMap(Map value) async {
    final prefs = await SharedPreferences.getInstance();
    return prefs.setString(mapSharedPreference, jsonEncode(value));
  }
  
  static Future<Map> getMap() async {
    final prefs = await SharedPreferences.getInstance();
    return jsonDecode(prefs.getString(mapSharedPreference) ?? "") ?? {};
  }
  
  static Future clearSharedPref() async {
    final prefs = await SharedPreferences.getInstance();
  
    await prefs.clear();
  }
}

¿Cómo usar esta función?

Por ejemplo, queremos getInt valor

1. Para obtener valor

SharedPref.getInt().then((value) {
     print(value);
   // value will be your data stored in that key

 });

2. Para establecer el valor

SharedPref.setInt(1);

Dart

const intSharedPreference = "integer shared preferences";
const doubleSharedPreference = "double shared preferences";
const stringSharedPreference = "string shared preferences";
const mapSharedPreference = "map shared preferences";
  
const listSharedPreference = "list shared preferences";
const boolSharedPreference = "bool shared preferences";

Mas consejos

Puede almacenar más de un par clave-valor con el mismo tipo de datos, pero debe tener una clave diferente. Si establece 2 valores con el mismo valor de claves, lo sobrescribirá.

Por ejemplo:

Hemos configurado mi número de móvil en una clave llamada datos del cliente.

prefs.setString(customerData, 1234567890)
then somewhere else I set my age in the same key
prefs.setInt(customerData, 21)

Condiciones de error

Error 1: Excepción no controlada: el tipo ‘Primer tipo de datos’ no es un subtipo del tipo ‘Segundo tipo de datos’ en typecast.prefs.getString(customerData); le dará 1234567890. pero prefs.getInt(customerData); le dará un error como este. Puede establecer muchos pares clave-valor en las preferencias compartidas. Pero el nombre de las claves debe ser único en cada par. Para acceder al valor que ya configuró. Debe usar la misma clave para obtener ese valor nuevamente de las preferencias compartidas.      

Solución: Tratando de cambiar el tipo de datos.

Error 2: excepción no controlada: MissingPluginException (No se encontró implementación para el método getAll en el canal plugins.flutter.io/shared_preferences)                                                                       

Solución: Desinstale la aplicación y vuelva a instalarla. 

Error 3: MissingPluginException (No se encontró implementación para el inicio del método en el canal plugins.flutter.io/url_launcher) 

Solución: Flutter clean o vuelva a ejecutar el proyecto.

Publicación traducida automáticamente

Artículo escrito por risheetajain309 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *