파파비의 블로그

플러터, flutter) Firebase - Cloud Firestore 사용하기 본문

개발/flutter

플러터, flutter) Firebase - Cloud Firestore 사용하기

N. Dave 2020. 6. 21. 22:00
반응형

참고 - 규칙관련;

https://firebase.google.com/docs/firestore/security/get-started#%EB%AA%A8%EB%91%90-%ED%97%88%EC%9A%A9

 

Cloud Firestore 보안 규칙 시작하기  |  Firebase

Cloud Firestore 보안 규칙을 사용하면 인프라를 관리하거나 서버 측 인증 및 승인 코드를 작성할 필요 없이 사용자를 위한 앱 개발에만 집중할 수 있습니다. 보안 규칙은 간단하지만 표현력 있는 형

firebase.google.com

파이어스토어는

컬렉션이라는 개념이 있고 document(문서)라는 개념이 있다.

컬렉션은 폴더의 개념이고, document는 하나의 data의 개념인데

특이한 점은 document안에 필드와 함께 또다른 컬렉션이 들어갈 수 있다.

그래서 계속 안으로 들어가보면, 컬렉션 > document > 컬렉션 > document.. 뭐 이런식으로 점점 들어가게 된다.

이것이 파이어스토어의 기본적인 구조이다.

 

컬렉션 안에 문서 -그 안에 필드 or 또다른 컬렉션

 

아무튼 기본세팅은 다 해놨다는 전제하에 한번 파이어스토어를 써보자.

일단 파이어스토어에 있는 data를 한번 읽어와보도록 하자

 

구조는 이렇다

chat - 어떤 문서 - messages (컬렉션) - 어떤 문서 text : Hi there

이런 구조에 데이터에 어떻게 접근할까?

 

일단 Firestore의 instance를 통해 접근하고 거기서 collenction 이라는 메소드를 통해 안에 path를 정해주면 되는데

바로 chat으로 가서 점점 그 안으로 가도 되고

바로 위에 처럼 경로를 지정해줘도 된다.

 

여기서 핵심은 snapshots 라는 메소드의 개념이다.

위의 내용은 팁이고,

snapshots의 return 값은 Stream이다. snapshots은 firestore sdk에 의해 firestore와 stream을 형성해서, firestore내 data의 변화가 있으면 리스너를 달아둔 것처럼 우리에게 신호를 주고, 그래서 그에 맞게 위젯들을 rebuild할 수 있다.

 

제대로 구성된 코드를 보자

스냅샷에 listen을 통해 변동신호가 올 때마다 전달받은 data를 print하게 해두었다.

 

이렇게 실행할 경우

FAB를 누르면 stream이 형성되어 그 이후로 data 변화가 생길때마다 자동으로 콘솔에 어떤 무언가가 print될 것이다.

 

<잠깐> 저렇게 실행하게 되면 버그가 생길 수 있는데

DexArchiveMergerException 이라고 뜨면 

 

app > build.gradle가서 

defaultConfig 맨 아레에

multiDexEnabled true 라고 적어주자. 그럼 잘 될것이다

 

일단 저렇게 실행해보면

'Instance of 'QuerySnapshot' 이 print된다

그리고 hi there 까지 가보기 위해선

 

이렇게 바꾸면 된다.

 

그 외에도

이렇게 존재하는 모든 documents 들을 한번씩 foreach로 돌리는 등 다양한 메소드들이 존재한다.

 

이렇게 하면 어떻게 될까? 말했듯이 messages의 stream이므로, 여기에 변동이 생기면 listen에서 감지하고 data를 받는다.

 

이렇게 messages에 다른 문서를 추가하고,

필드를 text로해서 foreach에서 읽힐 수 있게 해보자.

 

이미 스트림이 켜져있는 상태라서, 

 

hithere 이후, 그 다음번에는 hi there와 another text가 print에 찍힌 것을 알 수 있다.

참고로 firebase에서는 another text만 보내주지만, listen에서 전달받는 data는 이전data와 합쳐져서 우리에게 전달된다.

반응형
Comments