WriteReviewWrapper
클래스는 Firebase 인증
을 사용하여 사용자의 로그인 상태를 확인하고, 로그인되어 있는 경우 WriteReviewScreen
을 표시하고, 로그인되어 있지 않은 경우 로그인 화면으로 사용자를 리디렉션하는 래퍼(wrapper) 클래스입니다.
WriteReviewWrapper
클래스는 우선 authStateChanges
스트림을 사용하여 Firebase
에서 인증 상태를 확인합니다. 사용자가 로그인되어 있는지 확인하고, 로그인되어 있으면 리뷰 작성 화면을 표시하고, 로그인되어 있지 않으면 LoginScreen
으로 리디렉션합니다. 사용자의 로그인 상태 변화를 실시간으로 감지하여 화면을 동적으로 변경합니다.
StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
// ...
},
)
authStateChanges()
메서드를 통해 Firebase
에서 인증 상태를 확인하는 스트림을 구독합니다.
StreamBuilder
위젯을 사용하여 스트림의 상태를 감지하고, 사용자의 로그인 상태를 실시간으로 확인합니다.
hasData
속성을 사용하여 스트림에서 데이터를 수신한 경우와 사용자 데이터가 null
이 아닌 경우를 확인합니다.
사용자가 로그인되어 있는 경우 WriteReviewScreen
을 반환하고, 그렇지 않은 경우 LoginScreen
을 반환하여 사용자를 로그인 화면으로 리디렉션합니다. 이를 통해 애플리케이션의 보안성과 사용자 경험을 향상시키는 데 기여합니다.
if (snapshot.hasData && snapshot.data != null) {
return WriteReviewScreen(bookTitle: bookTitle);
} else {
return LoginScreen();
}
MyPageWrapper
클래스는 Firebase
를 사용하여 사용자의 로그인 상태를 확인하고, 그에 따라 다른 화면을 보여주는 역할을 합니다. 이 클래스는 StreamBuilder
를 활용하여 FirebaseAuth
의 authStateChanges()
스트림을 구독하고, 사용자의 인증 상태 변화를 감지합니다. 아래는 이 클래스의 주요 기능과 코드 분석입니다.
StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (BuildContext context, AsyncSnapshot<User?> snapshot) {
// ...
},
)
authStateChanges()
메서드를 통해 Firebase
에서 인증 상태를 확인하는 스트림을 구독합니다.
StreamBuilder
위젯을 사용하여 스트림의 상태를 감지하고, 사용자의 로그인 상태를 실시간으로 확인합니다.
FirebaseAuth
의 authStateChanges()
스트림을 사용하여 사용자의 로그인 상태를 확인합니다. ConnectionState
가 waiting
일 경우에는 로딩 화면을 표시합니다. 사용자가 로그인되어 있는지 여부를 확인합니다. 로그인되어 있는 경우 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();
}
}
},
);