如何解决如何使用SharedPreferences保存数据类型映射
我想通过使用SharedPreferences保存类型为map的提供程序数据,但是我找不到保存类型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()方法将地图转换为字符串,也可以将其保存。
更多信息: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);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。