Flutter SharedPreferences как загрузить все сохраненное?

Oct 27 2020

Как я могу загрузить все сохраненные в SharedPreferences?

Я сохранил много bool, и мне нужно загрузить все в список!

Так я сохраняю:

    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);
      }

Ответы

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);
}

Если у вас в постоянном хранилище тоже есть значение, отличное от типа bool, вы должны использовать распознаваемый ключ для хранения этого значения. Например: - sharedPreferences.setBool ('bool $ {widget.id}', значение);

Теперь это специальное ключевое слово можно использовать, чтобы узнать, является ли это значение типа bool или нет.

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);
  }
}

Изменить: - Вы должны использовать код внутри функции и вернуть строку Пример: -

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;
}

Затем вызовите эту функцию

List<bool> list = await getBoolList();

Примечание: - Проще говоря, только асинхронные функции позволят вам использовать ключевое слово await внутри них, и если они что-то вернут, это будет Future.