如何将列表保存到共享首选项
How to save a list to shared preferences
我想将列表保存到共享首选项,但它不起作用...目标是将数据添加到变量并保存它。
这是我要保存的变量:
var savedData = [
{'date': 0, 'testNumber': 0},
];
这是我尝试保存和接收变量的代码:
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(() {});
}
这是我得到的错误:
A value of type 'List<int>' can't be assigned to a variable of type 'List<Map<String, int>>'.
Try changing the type of the variable, or casting the right-hand type to 'List<Map<String, int>>'.
当您在列表中使用原始类型的 Map 对象时,您可以使用 jsonEncode
并转换为可以保存在 sharedPreferences 中的字符串,并在想要恢复时使用 jsonDecoder
。
像这样:
String toBeSaved = jsonEncode(savedData);
prefs.setString('dataTest', toBeSaved);
尝试使用 import 'dart:convert';
中的 jsonEncode
和 jsonDecode
像这样:
Future<void> saveDataTest() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString("dataTest ", jsonEncode(savedData));
}
Future<String> getDataStringTest() async {
final prefs = await SharedPreferences.getInstance();
savedData = List.from(jsonDecode(prefs.getString("dataTest")));
setState(() {});
}
我想将列表保存到共享首选项,但它不起作用...目标是将数据添加到变量并保存它。
这是我要保存的变量:
var savedData = [
{'date': 0, 'testNumber': 0},
];
这是我尝试保存和接收变量的代码:
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(() {});
}
这是我得到的错误:
A value of type 'List<int>' can't be assigned to a variable of type 'List<Map<String, int>>'.
Try changing the type of the variable, or casting the right-hand type to 'List<Map<String, int>>'.
当您在列表中使用原始类型的 Map 对象时,您可以使用 jsonEncode
并转换为可以保存在 sharedPreferences 中的字符串,并在想要恢复时使用 jsonDecoder
。
像这样:
String toBeSaved = jsonEncode(savedData);
prefs.setString('dataTest', toBeSaved);
尝试使用 import 'dart:convert';
jsonEncode
和 jsonDecode
像这样:
Future<void> saveDataTest() async {
final prefs = await SharedPreferences.getInstance();
await prefs.setString("dataTest ", jsonEncode(savedData));
}
Future<String> getDataStringTest() async {
final prefs = await SharedPreferences.getInstance();
savedData = List.from(jsonDecode(prefs.getString("dataTest")));
setState(() {});
}