Flutter SharedPreferences ¿cómo cargar todo lo guardado?

Oct 27 2020

¿Cómo puedo cargar todo lo guardado en SharedPreferences?

¡He guardado muchos bools y necesito cargar todos en una lista!

Así es como guardo:

    SharedPreferences sharedPreferences;
    bool isfavorit;
    
    @override
      void initState() {
        super.initState();
    
        SharedPreferences.getInstance().then((SharedPreferences sp) {
          sharedPreferences = sp;
          isfavorit = sharedPreferences.getBool('${widget.id}'); // will be null if never previously saved if (isfavorit == null) { isfavorit = false; persist(isfavorit); // set an initial value } setState(() {}); }); } void persist(bool value) { setState(() { isfavorit = value; }); sharedPreferences?.setBool('${widget.id}', value);
      }

Respuestas

1 ArpitAwasthi Oct 27 2020 at 03:30
List<bool> prefList = [];
var sharedPreferences = await SharedPreferences.getInstance();
Set<String> keys = sharedPreferences.getKeys();

for(int i=0; i<keys.length ; i++){
  bool value = sharedPreferences.getBool(keys.elementAt(i));
  prefList.add(value);
}

Si también tiene un valor no bool en su almacenamiento persistente, debe usar la clave reconocible para almacenar ese valor. Por ejemplo: - sharedPreferences.setBool ('bool $ {widget.id}', valor);

Ahora esta palabra clave especial se puede utilizar para saber si es un valor bool o no

List<bool> prefList = [];
var sharedPreferences = await SharedPreferences.getInstance();
Set<String> keys = sharedPreferences.getKeys();

for(int i=0; i<keys.length ; i++){
  if(key.elementAt(i).contains('bool')){
    bool value = sharedPreferences.getBool(keys.elementAt(i));
    prefList.add(value);
  }
}

Editar: - Tienes que usar el código dentro de una función y devolver tu cadena Ejemplo: -

Future<List<bool>> getBoolList() async{
  List<bool> prefList = [];
  var sharedPreferences = await SharedPreferences.getInstance();
  Set<String> keys = sharedPreferences.getKeys();

  for(int i=0; i<keys.length ; i++){
    bool value = sharedPreferences.getBool(keys.elementAt(i));
    prefList.add(value);
  }
  
  return prefList;
}

Entonces llama a esta función

List<bool> list = await getBoolList();

Nota: - En palabras simples, solo las funciones asincrónicas le permitirán usar la palabra clave await dentro de ellas, y si devuelven algo, será Future.