Flutter SharedPreferences как загрузить все сохраненное?
Как я могу загрузить все сохраненные в 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);
}
Ответы
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.