개요
freezed + json_serialization
- flutter하는데 아직도 이거 안쓰면 공부하자.
모델 생성
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
part 'diary.g.dart';
part 'diary.freezed.dart';
@freezed
class Diary with _$Diary {
@JsonSerializable(fieldRename: FieldRename.snake)
const factory Diary({
required String key,
required String content,
@Default('') String image,
required double createdAt,
}) = _Diary;
factory Diary.fromJson(Map<String, dynamic> json) => _$DiaryFromJson(json);
}
@JsonSerializable(fieldRename: FieldRename.snake)
은 snake case로 적힌 object의 key를 camel case로 적힌 필드명으로 매핑하는 코드.
- 원래는 pubspec.yaml
에서 일괄적으로 적용이 가능한데 안되서 임시로 수정
데이터 가져오기
DatabaseReference diaryDbRef = FirebaseDatabase.instance.ref('diaries');
List<Diary> diaries = [];
@override
void initState() {
super.initState();
getDiaries();
}
void getDiaries() async {
final snapshot = await diaryDbRef.get();
final map = snapshot.value as Map<dynamic, dynamic>;
final List<Diary> newDiaries = [];
map.forEach((key, value) {
value["key"] = key;
final diary = Diary.fromJson(value);
newDiaries.add(diary);
});
setState(() {
diaries = newDiaries;
});
}