[Flutter]

[Flutter] 객체 디스크에 저장 (Feat. SharedPreferences with json)

Hevton 2022. 11. 6. 00:01
반응형

기본적으로 SharedPreference만 가지고서는 객체를 저장할 수 없다.

SharedPreference는 원시 자료형만 지원하기 때문이다.

 

하지만 객체를 json형태로 변환하면 String에 속하게 되므로, SharedPreference에 적용할 수 있다.

 

 

예시 코드로 보여주자면

모델을 먼저 만들고

class User {


  String Firebase_UID;
  String FCM_TOKEN;

  List<String> SubscriptionList = [];


  User(this.Firebase_UID, this.FCM_TOKEN);

  User.fromJson(Map<String, dynamic> json)
      : Firebase_UID = json['Firebase_UID'],
        FCM_TOKEN = json['FCM_TOKEN'],
        SubscriptionList = json['SubscriptionList'].cast<String>();


  Map<String, dynamic> toJson() => {
    'Firebase_UID': Firebase_UID,
    'FCM_TOKEN': FCM_TOKEN,
    'SubscriptionList': SubscriptionList,
  };


}

 

 

얻어올 땐

  Future<void> getUser() async {

    SharedPreferences shared_User = await SharedPreferences.getInstance();

    String? u = shared_User.getString('user');

    if(u == null) {
      in_User = User('tmp', 'tmp'); // 임시값
    } else {
      var userMap = jsonDecode(u);

      in_User = User.fromJson(userMap);
    }


    return;

  }
  
  // in_User는 User 객체이다

 

 

저장할 땐

  void saveUser() async {


    SharedPreferences shared_User = await SharedPreferences.getInstance();
    var u = jsonEncode(in_User!.toJson());
    shared_User.setString('user', u);

  }
  
    // in_User는 User 객체이다

 

이렇게 간단하게 구현할 수 있다.

jsonEncode와 jsonDecode의 인자로 무엇이 넘겨지는지 잘 확인해보면 좋다!

 

 

jsonEncoding의 과정을 간단히 짚고 넘어가자면

 

객체 -> Map<String, dynamic> -> jsonString

이런식이 된다.

 

 

jsonDecoding의 과정을 이번엔 코드와 함께 보자면 

jsonString -> Map<String, dynamic> -> 객체

var jsonString = ‘{“name”: “John Smith”,”email”: “john@example.com”}’;

Map<String, dynamic> user = jsonDecode(jsonString);

User u = User.fromJson(user)

이렇게 된다.

 

 

이런 전체적인 과정을 직렬화라고 한다.

직렬화 : 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술

 

 

 

참고

https://stackoverflow.com/questions/53931513/store-data-as-an-object-in-shared-preferences-in-flutter

 

Store data as an object in shared preferences in flutter

I want to store an object in shared preferences which contains some fields in it like name, age, phone number etc. I don't know how to store an object in shared preferences in flutter.

stackoverflow.com

 

JSON 

https://medium.com/@thecodingpapa/json-flutter-61815c214eb8

 

JSON - Flutter

Flutter 개발시 JSON데이타를 다루는 법을 배워보자! 어플리케이션 개발시 네트워크 커뮤니케이션이 있다면 JSON을 쓸 가능성이 아주 많다.

medium.com

 

반응형