[Flutter] Firebase 인증을 이용한 Wrapper 클래스들

StudipU·2024년 3월 6일
0
post-thumbnail

WriteReviewWrapper 클래스는 Firebase 인증을 사용하여 사용자의 로그인 상태를 확인하고, 로그인되어 있는 경우 WriteReviewScreen을 표시하고, 로그인되어 있지 않은 경우 로그인 화면으로 사용자를 리디렉션하는 래퍼(wrapper) 클래스입니다.

WriteReviewWrapper 클래스 소개 ✨

WriteReviewWrapper 클래스는 우선 authStateChanges 스트림을 사용하여 Firebase에서 인증 상태를 확인합니다. 사용자가 로그인되어 있는지 확인하고, 로그인되어 있으면 리뷰 작성 화면을 표시하고, 로그인되어 있지 않으면 LoginScreen으로 리디렉션합니다. 사용자의 로그인 상태 변화를 실시간으로 감지하여 화면을 동적으로 변경합니다.

주요 기능과 코드 분석 🎭

1. Firebase 인증 확인

StreamBuilder(
  stream: FirebaseAuth.instance.authStateChanges(),
  builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
    // ...
  },
)

authStateChanges() 메서드를 통해 Firebase에서 인증 상태를 확인하는 스트림을 구독합니다.
StreamBuilder 위젯을 사용하여 스트림의 상태를 감지하고, 사용자의 로그인 상태를 실시간으로 확인합니다.

2. 사용자 로그인 상태에 따른 화면 랜더링

hasData 속성을 사용하여 스트림에서 데이터를 수신한 경우와 사용자 데이터가 null이 아닌 경우를 확인합니다.
사용자가 로그인되어 있는 경우 WriteReviewScreen을 반환하고, 그렇지 않은 경우 LoginScreen을 반환하여 사용자를 로그인 화면으로 리디렉션합니다. 이를 통해 애플리케이션의 보안성과 사용자 경험을 향상시키는 데 기여합니다.

if (snapshot.hasData && snapshot.data != null) {
  return WriteReviewScreen(bookTitle: bookTitle);
} else {
  return LoginScreen();
}

MyPageWrapper 클래스 소개 ✨

MyPageWrapper 클래스는 Firebase를 사용하여 사용자의 로그인 상태를 확인하고, 그에 따라 다른 화면을 보여주는 역할을 합니다. 이 클래스는 StreamBuilder를 활용하여 FirebaseAuthauthStateChanges() 스트림을 구독하고, 사용자의 인증 상태 변화를 감지합니다. 아래는 이 클래스의 주요 기능과 코드 분석입니다.

주요 기능과 코드 분석 🎭

1. Firebase 인증 확인

StreamBuilder(
  stream: FirebaseAuth.instance.authStateChanges(),
  builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
    // ...
  },
)

authStateChanges() 메서드를 통해 Firebase에서 인증 상태를 확인하는 스트림을 구독합니다.
StreamBuilder 위젯을 사용하여 스트림의 상태를 감지하고, 사용자의 로그인 상태를 실시간으로 확인합니다.

2. 사용자 로그인 상태에 따른 화면 랜더링

FirebaseAuthauthStateChanges() 스트림을 사용하여 사용자의 로그인 상태를 확인합니다. ConnectionStatewaiting일 경우에는 로딩 화면을 표시합니다. 사용자가 로그인되어 있는지 여부를 확인합니다. 로그인되어 있는 경우 MyPageScreen()을 반환하여 마이페이지 화면을 표시합니다. 사용자가 로그인되어 있지 않은 경우 LoginScreen()을 반환하여 로그인 화면을 표시합니다. 이렇게 MyPageWrapper 클래스는 Firebase를 통해 사용자 인증을 관리하고, 사용자의 인증 상태에 따라 동적으로 화면을 전환하는 기능을 제공합니다.

return StreamBuilder(
  stream: FirebaseAuth.instance.authStateChanges(),
  builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
    if (snapshot.connectionState == ConnectionState.waiting) {
      return CircularProgressIndicator();
    } else {
      if (snapshot.hasData && snapshot.data != null) {
        SystemChannels.textInput.invokeMethod('TextInput.hide');
        return MyPageScreen();
      } else {
        return LoginScreen();
      }
    }
  },
);
profile
컴공 대학생이 군대에서 작성하는 앱 개발 블로그

0개의 댓글