List<AddressBookModel>
과 같은 복잡한 객체가 존재 할 때, JSON 포맷으로 직렬화하여 문자열로 변환한 후 저장하는 방법
...
} else if (value is List<AddressBookModel>) {
prefs.setStringList(key, value);
} else {
print("--> StorageManager error : Invalid Type");
return false;
}
return true;
}
...
json 패키지의 jsonEncode 함수를 사용하여 AddressBookModel 객체의 리스트를 JSON 문자열로 직렬화할 수 있습니다.
먼저 AddressBookModel 클래스에 toJson 메소드를 추가해야 합니다.
class AddressBookModel {
final String name;
final String phone;
AddressBookModel({required this.name, required this.phone});
// toJson
Map<String, dynamic> toJson() {
return {
'name': name,
'phone': phone,
};
}
}
이제 map메서드를 사용해서 List<AddressBookModel>
객체를 직렬화하여 저장할 수 있습니다.
...
} else if (value is List<AddressBookModel>) {
List<String> serializedList = value.map((item) => jsonEncode(item.toJson())).toList();
prefs.setStringList(key, serializedList);
}
...
나중에 이 데이터를 읽어올 때는 JSON 문자열을 다시 AddressBookModel 객체로 역직렬화해야 합니다. 이를 위해 AddressBookModel 클래스에는 fromJson 메소드를 추가해야 합니다.
class AddressBookModel {
final String name;
final String phone;
AddressBookModel({required this.name, required this.phone});
Map<String, dynamic> toJson() {
return {
'name': name,
'phone': phone,
};
}
// fromJson
static AddressBookModel fromJson(Map<String, dynamic> json) {
return AddressBookModel(
name: json['name'],
phone: json['phone'],
);
}
}
...
String jsonString = {"name" : "John" , "phone" : "iphone"}
...
AddressBookModel addressBookModel = AddressBookModel.fromJson(jsonDecode(jsonString));
...