인프런 커뮤니티 질문&답변

현묵님의 프로필 이미지
현묵

작성한 질문수

Flutter 입문 확장판 - 인스타그램 클론 2.0

firestore 호출 관련 문의 드립니다.

작성

·

211

0

안녕하세요. firestore 호출 관련하여 문의 드립니다.

 

각 위젯에서 StreamBuilder로 QuerySnapshot이든 DocumentSnapshot이든 그때 그때 호출하고 있는데,

만약 하나의 Document 내 필드들이 여러개 존재한다면(DocumentSnapshot을 의미함) 화면에서는 각 text별로 노출되어야 한다고 가정을 했을때요

예) FirebaseFirestore.instance.collection('userInfo').doc(widget.user.email).snapshots();

이메일에 해당하는 userInfo에는 닉네임, 오늘의할말, 프로필사진 등 각각 정보가 들어있다고했을때

한번에 불러와서 변수에 각각 담아 저장하고있다가 각 text에 맞게 대입시켜주는게 효과적일듯 싶은데

그래서 최상위에서 화면로딩때 한번 호출후 변수에 담아놓고있다가 뿌려주고 싶습니다. (.get()사용이 아닌 .snapshots() 사용으로 실시간으로 변동되는사항이 있다면 변경이 되어야하겠죠)

제가 문의 드리고 싶은건

1-1. 각 text마다 스트림빌더위젯으로 호출하면 그만큼 firestore에 트랜잭션이 발생하여 과금도 두배로 발생되겠죠?

1-2. 그래서 효과적으로 firestore의 데이터를 호출하는 방법이 궁금합니다.

1-3. 방법도 여러가지가 있겠지만, 최상위트리에서 호출하는 방법이 있을까요?

 

답변 1

1

오준석님의 프로필 이미지
오준석
지식공유자

1-1. 각 text마다 스트림빌더위젯으로 호출하면 그만큼 firestore에 트랜잭션이 발생하여 과금도 두배로 발생되겠죠?

1-2. 그래서 효과적으로 firestore의 데이터를 호출하는 방법이 궁금합니다.

1-3. 방법도 여러가지가 있겠지만, 최상위트리에서 호출하는 방법이 있을까요?

 

한번에 답변을 드리자면 최대한 적은 수의 스트림빌더를 유지하면 됩니다.

예를 들어 게시물, 팔로잉, 팔로워를 각각 스트림빌더로 감싸고 있다는 이들을 하나의 스트림빌더로 감싸버리는 거죠.

이런 식으로 가장 최상단에 스트림빌더가 오는 곳을 찾아서 배치하면 됩니다.

잘 모르겠으면 그먄 build() 메서드의 리턴을 스트림빌더로 시작해 버려도 되고요.

과금은 쓰기와 읽기 횟수에 따라서 과금이 되는 구조입니다. 여러번 호출되면 그만큼 과금이 더 되겠죠.

그리고 가급적 변수는 사용하지 않는 것이 좋습니다.

최대한 변경 가능성을 배재하는 형태로 개발하는 것이 오류 발생률을 낮추는 길입니다.

예를 들어 가급적이면 StatefulWidget보다 StatelessWidget으로 사용하고 가급적이면 변수보다 final 상수를 사용하는 것입니다.

현묵님의 프로필 이미지
현묵
질문자

빠른답변 감사합니다~

현묵님의 프로필 이미지
현묵

작성한 질문수

질문하기