EPguy

[Flutter] SharedPreferences에 object list 저장하는 방법 본문

개발/Flutter

[Flutter] SharedPreferences에 object list 저장하는 방법

EPguy 2023. 9. 26. 15:37

아래 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));
        }
      }
    }
  }