es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo guardar una lista en preferencias compartidas

Quiero guardar una lista en las preferencias compartidas, pero no funciona… El objetivo es agregar datos a la variable y guardarla.

Esta es la variable que quiero guardar:

    var savedData = [
      {'date': 0, 'testNumber': 0},
    ];

Y este es el código que intenté para guardar y recibir la variable:

 Future<void> saveDataTest() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setStringList(
        'dataTest', savedData.map((i) => i.toString()).toList());
 }

 Future<string> getDataStringTest() async {
    final prefs = await SharedPreferences.getInstance();
    savedData =
     prefs.getStringList('dataTest').map((i) => int.parse(i)).toList();
    setState(() {});
 }

Este es el error que obtengo:

dart
A value of type 'List<int>' can't be assigned to a variable of type 'List<><string, int="">>'.
Try changing the type of the variable, or casting the right-hand type to 'List<><string, int="">>'.
</string,></string,>

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la variable savedData es de un tipo incorrecto. En el código, se define como una lista de mapas, pero al intentar recuperarlo de las preferencias compartidas, se está convirtiendo en una lista de enteros.

    Para solucionar el problema, la variable savedData debe definirse como una lista de cadenas, ya que ese es el tipo que se puede guardar en las preferencias compartidas. Cada cadena en la lista debe ser una versión serializada del objeto mapa.

    Aquí tienes una versión actualizada del código:

    List<string> savedData = [
      json.encode({'date': 0, 'testNumber': 0}),
    ];
    
    Future<void> saveDataTest() async {
      final prefs = await SharedPreferences.getInstance();
      await prefs.setStringList(
          'dataTest', savedData);
    }
    
    Future<void> getDataStringTest() async {
      final prefs = await SharedPreferences.getInstance();
      savedData = prefs.getStringList('dataTest');
      setState(() {});
    }
    
    

    Ten en cuenta que json.encode se utiliza para serializar el objeto mapa en una cadena JSON, que se puede guardar como una cadena en las preferencias compartidas. Al recuperar los datos, se utiliza lo contrario utilizando json.decode para deserializar la cadena JSON de nuevo en un objeto mapa.

    Utilizando este enfoque, la variable savedData se puede guardar y recuperar fácilmente de las preferencias compartidas.

Comments are closed.