如何使用 SharedPreferences 保存数据类型映射
How can I save data type map by using SharedPreferences
我想用SharedPreferences保存类型为map的Provider数据,但是找不到保存类型map的方法..
有没有办法一次性保存地图??
// 提供者数据
class SettingDataHandler extends ChangeNotifier {
Map<String, dynamic> selectedTimes = {
"Pomodoro Setting": 15,
"Rest Time Setting": 5,
"Long Rest Time Setting": 15,
"Term of Resting Time Setting": 5
};
setTime(String typeOfSetting, int changeValue) {
selectedTimes.update(typeOfSetting, (value) => changeValue);
notifyListeners();
}
}
// 这是我使用 SharedPreferences
的代码
Future<int> _initPref() async {
prefs = await SharedPreferences.getInstance();
var timeData = prefs.get('timeData');
if (timeData != null) {
settingDataHandler.selectedTimes["Pomodoro Setting"] = timeData;
}
pomodoroHandler.pomodoroTime = settingDataHandler.selectedTimes["Pomodoro Setting"];
pomodoroHandler.time = pomodoroHandler.pomodoroTime * 60;
return 0;
}
Future<void> _changedTime() async {
prefs = await SharedPreferences.getInstance();
int currentPomodoroTime = settingDataHandler.selectedTimes["Pomodoro Setting"];
print(currentPomodoroTime);
await prefs.setInt('timeData', currentPomodoroTime);
}
您只能在共享首选项中保存字符串或字符串列表,不能直接保存地图。但是您可以使用 dart:convert 库以及 jsonEncode() 和 jsonDecode() 方法将地图 to/from 转换为字符串并以这种方式保存。
更多信息:https://flutter.dev/docs/development/data-and-backend/json
没有直接在共享首选项中保存地图的选项。
您必须使用 json.encode()
方法将地图转换为字符串。当您取回字符串时,您必须使用 json.decode()
.
对其进行解码
首先import 'dart:convert';
将地图保存到共享首选项
prefs = await SharedPreferences.getInstance();
Map<String, dynamic> selectedTimes = {
"Pomodoro Setting": 15,
"Rest Time Setting": 5,
"Long Rest Time Setting": 15,
"Term of Resting Time Setting": 5
};
String encodedMap = json.encode(selectedTimes);
print(encodedMap);
prefs.setString('timeData', encodedMap);
从共享首选项中检索地图
String encodedMap = prefs.getString('timeData');
Map<String,dynamic> decodedMap = json.decode(encodedMap);
print(decodedMap);
我想用SharedPreferences保存类型为map的Provider数据,但是找不到保存类型map的方法..
有没有办法一次性保存地图??
// 提供者数据
class SettingDataHandler extends ChangeNotifier {
Map<String, dynamic> selectedTimes = {
"Pomodoro Setting": 15,
"Rest Time Setting": 5,
"Long Rest Time Setting": 15,
"Term of Resting Time Setting": 5
};
setTime(String typeOfSetting, int changeValue) {
selectedTimes.update(typeOfSetting, (value) => changeValue);
notifyListeners();
}
}
// 这是我使用 SharedPreferences
的代码 Future<int> _initPref() async {
prefs = await SharedPreferences.getInstance();
var timeData = prefs.get('timeData');
if (timeData != null) {
settingDataHandler.selectedTimes["Pomodoro Setting"] = timeData;
}
pomodoroHandler.pomodoroTime = settingDataHandler.selectedTimes["Pomodoro Setting"];
pomodoroHandler.time = pomodoroHandler.pomodoroTime * 60;
return 0;
}
Future<void> _changedTime() async {
prefs = await SharedPreferences.getInstance();
int currentPomodoroTime = settingDataHandler.selectedTimes["Pomodoro Setting"];
print(currentPomodoroTime);
await prefs.setInt('timeData', currentPomodoroTime);
}
您只能在共享首选项中保存字符串或字符串列表,不能直接保存地图。但是您可以使用 dart:convert 库以及 jsonEncode() 和 jsonDecode() 方法将地图 to/from 转换为字符串并以这种方式保存。
更多信息:https://flutter.dev/docs/development/data-and-backend/json
没有直接在共享首选项中保存地图的选项。
您必须使用 json.encode()
方法将地图转换为字符串。当您取回字符串时,您必须使用 json.decode()
.
首先import 'dart:convert';
将地图保存到共享首选项
prefs = await SharedPreferences.getInstance();
Map<String, dynamic> selectedTimes = {
"Pomodoro Setting": 15,
"Rest Time Setting": 5,
"Long Rest Time Setting": 15,
"Term of Resting Time Setting": 5
};
String encodedMap = json.encode(selectedTimes);
print(encodedMap);
prefs.setString('timeData', encodedMap);
从共享首选项中检索地图
String encodedMap = prefs.getString('timeData');
Map<String,dynamic> decodedMap = json.decode(encodedMap);
print(decodedMap);