[Flutter] SharedPreferencesを使って、オブジェクトのList(配列)をJSONの形にして保存する


Flutterのアプリ作成で、

オブジェクトのListを端末に保存しておきたかったので、

あまりそのようなケースは、多くないかもしれませんが、覚書として記事にしました。

少しでも誰かのお役に立てれば、幸いです。

JSONに変換する

SharedPreferencesで端末に保存できる値は、

intdoubleboolStringList<String> の型のみなので、

オブジェクトのListの場合は、それをJSONに変換してStringとして保存します。

import 'package:shared_preferences/shared_preferences.dart';

  Future<void> setObjectList(List<T> objectList) async {
    SharedPreferences _prefs = await SharedPreferences.getInstance();
    final jsonString = jsonEncode(objectList).toString();
    await _prefs.setString('TEST', jsonString);
  }

取得したStringを元のオブジェクトのリストに変換する

値を取得した後は、その文字列をJSONに戻して、

オブジェクトのFreezedクラスのfromJsonを利用して、元のオブジェクトに戻して、

リストにします。

  Future<List<T>> getObjectList() async {
    SharedPreferences _prefs = await SharedPreferences.getInstance();
    final jsonString = _prefs.getString('TEST') ?? "";
    final List<dynamic> decodedJson = jsonDecode(jsonString);
    final objectList = decodedJson.map((e) =>Object.fromJson(e)).toList();
    return objectList;
  }

参考にしたサイト