🐹
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