[Flutter] firebase database에서 읽어온 object 파싱하기

bluejoy·2023년 3월 20일
0

Flutter

목록 보기
14/15

개요

freezed + json_serialization

  • flutter하는데 아직도 이거 안쓰면 공부하자.

모델 생성

import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:flutter/foundation.dart';
part 'diary.g.dart';
part 'diary.freezed.dart';


class Diary with _$Diary {
	// 전역 설정이 적용이 안되서 이렇게 임시로 함.
  (fieldRename: FieldRename.snake) 
  const factory Diary({
    required String key,
    required String content,
    ('') 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');

// stateful 위젯 구현 부분은 생략
List<Diary> diaries = [];

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) {
  	// 추후 모델 이용하며 key를 이용할 수 있도록 추가
    value["key"] = key;
    final diary = Diary.fromJson(value);
    newDiaries.add(diary);
  });
  setState(() {
    diaries = newDiaries;
  });
}
profile
개발자 지망생입니다.

0개의 댓글