🐹

Flutter/Dart) SharedPreferenceにJson, Mapデータを保存する方法

2024/09/09に公開

背景

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

解決策

結論、まず MapString にエンコードして setStringメソッドにて保存し、
getStringでデータをロードする時に StringMap にデコードしてデータタイプを元に戻す作業をします。

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