🐹
Flutter/Dart) SharedPreferenceにJson, Mapデータを保存する方法
背景
shared_preferencesを利用して、アプリ内にMap,Jsonデータを保存しようとした時に、setString,setBool,setIntなどのメソッドはあるものの、Mapデータを保存できるメソッドがないという壁にぶつかりました。

解決策
結論、まず Map → String にエンコードして setStringメソッドにて保存し、
getStringでデータをロードする時に String → Map にデコードしてデータタイプを元に戻す作業をします。
Map → String
Future<void> _saveData(Map data) async {
data = {
"name": "Fritz",
"occupation": "Mushoku",
};
final prefs = await SharedPreferences.getInstance();
String tempData = jsonEncode(data);
print(tempData.runtimeType); //データタイプを出力
print(tempData)
prefs.setString("temp", tempData); // MapデータをStringとして保存
}
mapデータをStringに変換し、setStringで保存。
データタイプをチェックして、出力してみると、
実行結果
String
{"name": "Fritz", "occupation": "Mushoku",}
String → Map
Future<void> _loadData() async {
final prefs = await SharedPreferences.getInstance();
String? savedData = prefs.getString("temp");
if (savedData != null) {
final jsonData = jsonDecode(savedData)
}
print(jsonData.runtimeType);
print(jsonData); //データタイプを出力
保存されたStringデータを Mapに戻す。
データタイプをチェックして、出力してみると、
実行結果
Map
{
"name": "Fritz",
"occupation": "Mushoku",
}
結論
めんどくさい。setMap作って欲しい。
Discussion