После успешного входа в систему моего пользователя, когда у меня есть пользователь Firebase, я хочу проверить, есть ли уже созданный профиль на моем сервере, отправив действие, которое выполняет асинхронный вызов для получения профиля.
Если профиль не возвращен, я хочу перейти на страницу создания профиля, в противном случае загрузите страницу профиля.
Я думаю отправить второе действие прямо в промежуточном программном обеспечении входа, но кажется странным смешивать профиль и код входа в промежуточном программном обеспечении входа.
Есть ли лучший или более стандартный способ сделать то, что я пытаюсь сделать?
Я ничего не пробовал, но я думал о том, чтобы отправить второе действие в промежуточном программном обеспечении для входа и перейти оттуда к нужной странице.
ThunkAction<AppState> logIn = (Store<AppState> store) async {
store.dispatch(UserLoginAction());
try {
final GoogleSignIn _googleSignIn = new GoogleSignIn();
GoogleSignInAccount googleUser = await _googleSignIn.signIn();
GoogleSignInAuthentication googleAuth = await googleUser.authentication;
final FirebaseAuth _auth = FirebaseAuth.instance;
final FirebaseUser _fb = await _auth.signInWithGoogle(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
User user = new User(id: _fb.uid, name: _fb.displayName, email: _fb.email, photoUrl: _fb.photoUrl);
store.dispatch(UserLoginSuccessAction(user: user));
store.dispatch(GetProfileAction());
Profile profile = await ProfileService.get().getProfile(_fb.uid);
store.dispatch(GetProfileSuccessAction(profile: profile));
if (profile) {
// Navigate to Profile Page
} else {
// Navigate to Profile Creation Page
}
} catch(error) {
store.dispatch(UserLoginFailAction(error: error));
}
};
Edit:
Я просто придумал способ, который кажется лучше моего предыдущего предложения.
Что если после успешного входа я просто перейду на страницу профиля. На странице инициализации профиля я бы отправил действие, чтобы получить профиль. Страница профиля будет отображаться по-разному в зависимости от того, был ли профиль инициализирован в AppState после завершения промежуточного программного обеспечения и редуктора.
Кажется, это нормально, или есть другой и лучший способ?