Я новичок в Flutter и Dart, и я изо всех сил пытался сохранить значения в общих настройках, чтобы использовать их при перезапуске приложения. Я успешно сохранил переменные, но мне также нужно сохранить списки объектов. Я знаю, что поскольку общие настройки принимают только списки строк, мне нужно преобразовать мой список объектов в массив JSON, а когда приложение перезапустится, получить этот список и снова преобразовать его в список объектов.
Мне удалось закодировать список объектов в JSON, и я получил что-то вроде этого:
[{name: Rent, amount: 250}, {name: Insurance, amount: 105}]
Я добился этого с помощью следующей функции:
void SaveLists(key, value) async { //where value is a List<Object>
final prefs = await SharedPreferences.getInstance();
List<dynamic> json_list = (value.map((i) => i.toJson())).toList();
prefs.setStringList(key, json_list); //this line causes the error
print('$json_list');
}
Список json_list содержит массив JSON, показанный выше. Однако, когда я пытаюсь сохранить его в общих настройках с помощью prefs.setStringList(key, json_list);
, я получаю следующую ошибку:
Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'List<String>'
Теперь, допустим, что я каким-то образом успешно храню его в общих настройках, как мне преобразовать JSON массив обратно в список при вызове с prefs.getString('key')
?
Если вам нужно увидеть класс, вот он:
import 'dart:convert';
class Random_expenses {
String name;
double amount;
Random_expenses({this.name, this.amount});
Random_expenses.fromJson(Map<String, dynamic> json)
: this.name = json['name'],
this.amount = json['amount'];
Map<String, dynamic> toJson() =>
{'name': this.name, 'amount': this.amount};
}