如何使用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);

您只能在共享首选项中保存字符串或字符串列表,而不能直接保存映射。但是,您可以使用dart:convert库以及jsonEncode((和jsonDecode((方法将映射转换为字符串/从字符串转换为字符串并以这种方式保存。

更多信息:https://flutter.dev/docs/development/data-and-backend/json

最新更新