riverpod으로 상태관리하기
안녕하세요 선생님, 강의 흥미롭게 잘 듣고 있습니다.
저는 Provider에 대한 지식이 없어 제가 알고있던 riverpod을 사용하여 프로젝트를 진행하고 있었습니다.
그런데 이 강의의 update함수를 override하여 인증상태를 관리하는 부분에서 막혔습니다.
riverpod의 StateNotifer에는 해당 기능이 없더라구요..
(FirebaseAuth.instance.userChanges()에 따라서 state를 변경시키는 부분.)
혹시 만약 riverpod을 사용한다면 어떤 방향으로 코딩을해야할까요?
답변주시면 감사하겠습니다!
답변 1
1
AuthProvider 클래스에
User 객체를 파라메터로 전달받는 함수를 선언하고
update 함수와 동일한 로직을 작성 (final user = watch<User?>(); 로직은 제외)생성자에 ref.listen 을 사용해서 상태관리 데이터로 등록한 User 객체가 변경될 경우,
1번에서 선언한 함수를 호출하는 로직 작성
이렇게 작성하면 되지 않을까 생각은 합니다.
프로젝트 파일을 보내주시면 한 번 확인해보겠습니다.
0
빠른 답변 감사드립니다!
ref.listen함수에 <User?>를 반환하는 streamProvider를 넣으려고 했는데 빨간불 들어오면서 안들어가지네요...ㅜㅜ 한번만 더 확인 부탁드립니다!
에러내용은 다음과 같습니다.
The argument type 'StreamProvider<User?>' can't be assigned to the parameter type 'AlwaysAliveProviderListenable<User?>'.
https://github.com/minseo-flutter/flutter_study.git
0
아래 코드로 구동해보시기 바랍니다.
테스트는 해보지 않아서 에러가 발생할 수 있습니다.
// AuthStateNotifier 가 Notifier 를 상속하므로 NotifierProvider 를 사용해야 합니다.
final authStateProvider = NotifierProvider<AuthStateNotifier, AuthState>(() => AuthStateNotifier());
// StateNotifier 대신 Notifier 를 사용하는 것을 추천
// StateNotifier 는 이제 레거시 코드입니다.
// StateNotifier 와 기능과 용도는 동일합니다.
// Notifier 를 상속하면 Ref 를 전달받지 않아도 사용할 수 있습니다.
class AuthStateNotifier extends Notifier<AuthState> {
late AuthRepository authRepository;
// build 함수는 생성자 역할을 합니다.
@override
AuthState build() {
authRepository = ref.watch(authRepositoryProvider);
ref.listen(authStreamProvider, (previous, next) {
update(user: next.value);
});
return AuthState.init();
}
void update({
required User? user,
}) {
if (user != null && !user.emailVerified) {
return;
}
if (user == null && state.authStatus == AuthStatus.unauthenticated) {
return;
}
if (user != null) {
state = state.copyWith(
authStatus: AuthStatus.authenticated,
);
} else {
state = state.copyWith(
authStatus: AuthStatus.unauthenticated,
);
}
}
0
선생님 답변을 곰곰히 생각해보고 여러번 시도했더니 해결되었습니다! 생성자에 ref.listen 함수를 선언했어야 하는데 자꾸 이상한 곳에 선언했네요...
늦은밤까지 답변주셔서 감사합니다!
좋은밤되세요!
실수로 파이어프로젝트를 삭제하여 다시 살렸는데 profile screen이 에러입니다
0
160
1
파이어베이스 연동 중 Auth 및 ImagePicker 오류 발생, 도움 요청드립니다.
0
157
2
파이어베이스에서 실수로 강의프로젝트를 실수로 삭제하였습니다.도와주세요
0
192
2
파이어베이스 스토리지 설정에 프로젝트 업그레이드 라고 뜨는데 어떻게 하면됩니까
0
241
1
이거는 왜그렇죠
0
160
1
셋팅에 문제가생겼네요
0
149
2
마치면서 에러가 댓글가져오기와 좋아요 리스트 가져오기 에러
0
114
1
섹션15페이징기능_4프로필 화면에 페이징 적용
0
103
1
섹션15페이징기능_3좋아요 목록 화면에 페이징 적용
0
189
1
섹션14페이징기능_1게시글 목록 화면에 페이징 적용 feed_repository.dart에러
0
109
1
11셕션에서 좋아요.강의코드에서 좋아요 업데이트 문제 제대로 수정된건가요
0
126
1
12댓글화면_3댓글정보 가져오기
0
232
2
11댓글화면_댓글 정보 가져오기에서 콘솔에 commentList못찍고 있어요
0
85
1
섹션11 좋아요 목록화면에서 콘솔에서 FeedModel 데이터를 못가지고 있어요
0
94
1
섹션11 좋아요.누른 게시글 정보를 화면에표시에서 Exception 왜 발생합니까
0
149
0
Storage사용..?
0
931
2
10 게시물 화면에서 조금헷갈려서요
0
142
2
게시글 이미지 슬라이드 기능추가 carouselslider에러가 났습니다
0
150
1
섹션8 게시글 정보 화면에 표시
0
117
1
섹션8 게시글 정보가져오기
0
126
1
섹션8 게시글 정보 가져오기
0
96
1
섹션8 게시글 정보 가져오기 feedModel를 못받아오는것 같습니다.
0
130
1
메인화면에서 뒤로가기 눌렀을때 어플종료관련 건
0
191
1
섹션8 게시글 정보가져오기
0
167
2





