-
FirebaseAuth.instance.authStateChangesflutter 2022. 9. 21. 18:17
파베 auth를 쓸때
FirebaseAuth.instance.authStateChanges() 가 반환하는 User? 객체를 listen 하다
user가 null이냐의 여부로 로긴 이벤트를 트리거 시켜놨는데..
똑같은 사용자를 두번 리슨하는 이슈가발생..
(불필요하게 구독이 두번 발생하면 의도하지않은 사이드이펙트가 발생할수있음)
리스너가 등록될때, user상태가 변경될때 등등 listen이 작동한다고하는데..
해쉬코드를 보면 두번 리슨될때마다 메모리 주소가 다르다
동일한 문제를 겪는 외국인들의 문답
https://github.com/firebase/flutterfire/issues/3628
🐛 [firebase_auth] FirebaseAuth.instance.userChanges fires twice on initial listen · Issue #3628 · firebase/flutterfire
Bug report Describe the bug FirebaseAuth.instance.authStateChanges and FirebaseAuth.instance.userChanges always fires twice the first time i listen to it. Steps to reproduce Steps to reproduce the ...
github.com
답변이 다 맞는건아니고
이전이벤트와 다음이벤트의 Id값을 비교하는것도 좀 추후 문제가 발생할거같고..
rx dart의 debounce로 처리하라는 답변도 있고..
이것저것 하다가 결국
FirebaseAuth.instance.userChanges() .distinct((p, n) => p.hashCode != n.hashCode) .listen((authUser) async { debugPrint('authUserChangeObs 리슨 구독 >> ');
이렇게하니 두번 리슨안하고 한번 리슨함..
authStateChanges() 를 userchanges()로 바꿨고
userchanges의 메뉴얼 설명은 다음과같음
->
사용자 업데이트에 대한 변경 사항을 알립니다.
이것은 authStateChanges 및 idTokenChanges 모두의 상위 집합입니다.
자격 증명이 연결되거나 연결 해제되고 사용자 프로필이 업데이트되는 경우와 같은 모든 사용자 변경 사항에 대한 이벤트를 제공합니다.
이 스트림의 목적은 수동으로 다시 로드를 호출한 다음 애플리케이션 변경 사항을 복원하지 않고도 사용자 상태(로그인, 로그아웃, 다른 사용자 및 토큰 새로 고침)에 대한 실시간 업데이트를 수신하는 것입니다.
'flutter' 카테고리의 다른 글
fcm/백그라운드/터미네이트 (0) 2023.02.22 disposable class (0) 2022.10.23 BehaviorSubject close 이슈 Bad state: Cannot add new events after calling close (0) 2022.05.13 bloc 7.2버전부터 바뀐 이벤트 처리 (0) 2021.12.10 [메모/스크랩] map 함수 (0) 2021.12.10