flutter - 如何使用 SharedPreferences 保存数据类型映射
问题描述
我想使用 SharedPreferences 保存类型为映射的 Provider 数据,但我找不到保存类型映射的方法。
有没有办法一次保存地图?
// 提供者数据
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);
}
解决方案
没有选项可以直接将地图保存在共享首选项中。
您必须使用方法将地图转换为字符串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);
推荐阅读
- list - SwiftUI:列表/ForEach 背景颜色
- javascript - 如何在扩展面板中使用滚动查看
- javascript - 永久更新我从 chrome 扩展中的本地存储中获得的值
- ruby - Gemfile.lock 充满了我无法解决的冲突
- css - 删除加载条之间的所有空间 - ngx-skeleton-loader - Angular
- angular - 交互测试中的角度变化检测
- java - 使用 Hibernate 验证实体是否存在的最佳实践
- php - 获取 X-Sendfile 提供的字节数
- javascript - React-native RNFetchBlob:Axios Post 请求发送字符串而不是二进制数据
- java - 计算素数的大 O 表示法