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

최현성님의 프로필 이미지

작성한 질문수

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

UI 분기

팔로우/언팔로우 버그

작성

·

233

0

팔로우/언팔로우에서 [UI분기] 제목으로 올라간 강의에 대한 질문입니다. 

.setData({document['email']: true});

이렇게 구현을 하면,

유저A를 팔로우한 상태에서 유저 B를 팔로우하면,

유저 A를 팔로우한다는 정보가 Database 에서 사라집니다.

.setData({document['email']: true});

이게 그냥 덮어쓰는 느낌인것같군요...

이 실험은 A = test@test.com 으로 B = 자기자신

으로 놓고 실험할 수 있습니다.

이 버그를 어떻게 해결할 수 있을까요?

답변 4

2

merge 문제 맞습니다. 추가하니 해결되네요 감사합니다.

0

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

예전에 답변 후 추가 질문이 없어서 잘 되는줄 알고 있었습니다.

살펴보니 이전 데이터가 삭제되는 것이 문제네요.

setData() 메서드의 두번째 파라미터로 merge: true 를 다음과 같이 추가해 보시겠어요?

이렇게 하면 user.email 아래에 있는 기존 데이터를 삭제하지 않고 새로운 데이터를 추가하게 됩니다.

제가 이 코드 실행후 구글 로그인이 안되는 현상 때문에 해결이 안되서 확인은 못 해 봤습니다.

혹시 잘 되신다면 답변 달아주시면 완성 코드에 반영과 강의 영상에 부연설명을 추가하는데 도움이 될 것 같습니다.

감사합니다.

// 팔로우
void _follow() {
Firestore.instance
.collection('following')
.document(user.email)
.setData({document['email']: true}, merge: true);

Firestore.instance
.collection('follower')
.document(document['email'])
.setData({user.email: true}, merge: true);
}

// 언팔로우
void _unfollow() {
Firestore.instance
.collection('following')
.document(user.email)
.setData({document['email']: false}, merge: true);

Firestore.instance
.collection('follower')
.document(document['email'])
.setData({user.email: false}, merge: true);
}

0

안녕하세요. 위의 내용으로 팔로우, 언팔로우 문제를 겪고 있습니다.

follower 콜렉션이 만들어지지 않은 상황에서는 updateDAta가 작동하지 않습니다.

처음에 setData나 add로 이메일을 추가하고 난 후 updateData가 작동되어야 할 것 같은데 난감하네요.

혹시나 해서 setData로 콜렉션이 만들어지고 난 후 updateData로 수정하고 동작을 해보니 필드(bool)에서 이메일이

아이디, 도메인, com 이런식으로 나누어 지면서 데이타가 이상하게 들어갑니다.

0

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

아앗. 버그가 맞네요. 이런 실수를... 죄송합니다.

지금 테스트를 할 수 없어서 확인은 못 해 봤지만, 일단 setDate 대신 updateData로 고쳐보세요.
_follow(), _unfollow() 모두요.