EPguy
[Flutter] SharedPreferences에 object list 저장하는 방법 본문
아래 Todo 클래스의 리스트를 SharedPreferences에 저장하는 예시를 설명드리겠습니다.
(fromJson, toJson 메소드 구현 필수)
class Todo {
bool isChecked = false;
bool isDeleted = false;
String text;
Todo(this.text);
Todo.fromJson(Map<String, dynamic> json)
: isChecked = json['isChecked'],
isDeleted = json['isDeleted'],
text = json['text'];
Map<String, dynamic> toJson() =>
{'isChecked': isChecked, 'isDeleted': isDeleted, 'text': text};
}
저장하기
jsonEncode 메소드를 사용하여 SharedPreferences에 String 형식으로 저장해줍니다.
단, 주의할 점은 위 Todo class 코드에 있는 것 처럼 toJson 메소드를 구현해주셔야 합니다.
void savePreferences() async {
final prefs = await SharedPreferences.getInstance();
final encode = jsonEncode(_todos);
await prefs.setString("todos", encode);
}
불러오기
저장된 데이터는 jsonDecode 메소드로 decode를 하면되는데 이 때 타입이 List<Map<String, dynamic>> 으로 반환됩니다.
그렇기 때문에 for문과 Todo 클래스에 있는 fromJson 메소드를 이용하여 타입을 변환시켜 사용하면 됩니다.
void initPrefereneces() async {
final prefs = await SharedPreferences.getInstance();
var data = prefs.getString("todos");
if (data != null) {
final decode = jsonDecode(data);
if (decode is List<dynamic>) {
for (final e in decode) {
_todos.add(Todo.fromJson(e));
}
}
}
}