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
</string,></string,>
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="">>'.
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:
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 utilizandojson.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.