freezed 모델을 작성하고 build_runner 패키지의 명령어를 통해 flutter pub run build_runner build --delete-conflicting-outputs
혹은 dart run build_runner build --delete-conflicting-outputs
를 terminal에서 실행한다.
이때 .freezed.dart
, .g.dart
파일이 생성되는데, gitignore
에 추가하여 git에 추가되지 않도록 해준다.(파일양이 많아지기 때문, 관리하기에도 복잡, 가시성 저하되므로..)
freezed
를 적용함으로써 아래와 같이 코드가 변경된다.
List<DtoBanner> list = [];
for (var doc in snapshot.docs) {
final data = doc.data() as Map<String, dynamic>;
list.add(DtoBanner(
id: doc.id,
imageUrl: data['imageUrl'],
bannerUrl: data['bannerUrl'],
type: data['type'],
createdAt: (doc.get('createdAt') as Timestamp).toDate(),
));
}
return list;
return snapshot.docs.map((doc) => DtoBanner.fromJson(doc.data())).toList();
firebase query
의 withConverter
함수를 이용해서 데이터를 가져올 때 타입 변환을 시켜줄 수도 있다.
var query = _banner
.where('isPublished', isEqualTo: true)
.withConverter<DtoBanner>(
fromFirestore: (snapshot, _) =>
DtoBanner.fromJson(snapshot.data() ?? {}),
toFirestore: (banner, _) => banner.toJson());
var snap = await query.get();
return snap.docs.map((e) => e.data()).toList();