Flutterのアプリ作成で、
オブジェクトのListを端末に保存しておきたかったので、
あまりそのようなケースは、多くないかもしれませんが、覚書として記事にしました。
少しでも誰かのお役に立てれば、幸いです。
JSONに変換する
SharedPreferencesで端末に保存できる値は、
int
、double
、bool
、String
、List<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;
}
参考にしたサイト