[Flutter] freezed를 적용한 firebase data call

hodu·2023년 5월 24일
0

Flutter

목록 보기
14/30

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를 적용함으로써 아래와 같이 코드가 변경된다.


before

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;

after

return snapshot.docs.map((doc) => DtoBanner.fromJson(doc.data())).toList();

firebase querywithConverter함수를 이용해서 데이터를 가져올 때 타입 변환을 시켜줄 수도 있다.

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();
profile
Flutter developer

0개의 댓글