inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Flutter로 SNS 앱 만들기

Firebase Auth 인증 상태에 따라 AuthStatus 상태 변경

riverpod으로 상태관리하기

해결된 질문

319

kimmeanseo01

작성한 질문수 2

0

안녕하세요 선생님, 강의 흥미롭게 잘 듣고 있습니다.

저는 Provider에 대한 지식이 없어 제가 알고있던 riverpod을 사용하여 프로젝트를 진행하고 있었습니다.

그런데 이 강의의 update함수를 override하여 인증상태를 관리하는 부분에서 막혔습니다.

riverpod의 StateNotifer에는 해당 기능이 없더라구요..

(FirebaseAuth.instance.userChanges()에 따라서 state를 변경시키는 부분.)

혹시 만약 riverpod을 사용한다면 어떤 방향으로 코딩을해야할까요?

답변주시면 감사하겠습니다!

 

flutter android firebase dart

답변 1

1

DEV MOO

AuthProvider 클래스에

  1. User 객체를 파라메터로 전달받는 함수를 선언하고
    update 함수와 동일한 로직을 작성 (final user = watch<User?>(); 로직은 제외)

  2. 생성자에 ref.listen 을 사용해서 상태관리 데이터로 등록한 User 객체가 변경될 경우,
    1번에서 선언한 함수를 호출하는 로직 작성

    이렇게 작성하면 되지 않을까 생각은 합니다.
    프로젝트 파일을 보내주시면 한 번 확인해보겠습니다.

0

kimmeanseo01

빠른 답변 감사드립니다!

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

DEV MOO

프로젝트 전체를 압축해서
gobackad001@gmail.com 로 보내주시면 감사하겠습니다.

0

DEV MOO

아래 코드로 구동해보시기 바랍니다.
테스트는 해보지 않아서 에러가 발생할 수 있습니다.

 

// 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

kimmeanseo01

선생님 답변을 곰곰히 생각해보고 여러번 시도했더니 해결되었습니다! 생성자에 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