Я использую flutter для входа и регистрации по электронной почте. Мой метод входа в систему работает нормально, и мой метод регистрации (регистрации) в основном такой же, поэтому они должны иметь тот же результат, но изменения статуса пользователя в функции регистрации не уведомляют поставщика в оболочке, поэтому он не может перейти на главный экран.
В AuthService код такой:
final FirebaseAuth _auth = FirebaseAuth.instance;
Stream<User> get user {
print(_auth.authStateChanges());
return _auth.authStateChanges();
}
Future signInWithEP (String email, String password) async {
try{
UserCredential result = await _auth.signInWithEmailAndPassword(email: email, password: password);
User user = result.user;
return user;
} catch (e) {
print(e.toString());
return null;
}
}
Future signUpWithEP(String email, String password) async {
try{
UserCredential result = await _auth.createUserWithEmailAndPassword(email: email, password: password);
User user = result.user;
return user;
} catch (e) {
print(e.toString());
return null;
}
}
В main.dart
return MultiProvider(
providers: [
StreamProvider<User>.value(
value: AuthService().user,
),
],
child: MaterialApp(
home: Wrapper(),
routes: {
'/signin': (context) => SignIn(),
'/register': (context) => Register(),
},
),
В wrapper.dart,
Widget build(BuildContext context) {
final user = Provider.of<User>(context);
print("wrappper $user");
if(user == null) {
return SignIn();
} else {
return Home();
}
}
В обоих случаях (вход и регистрация) при нажатии на кнопку будет отображаться
D/FirebaseAuth( 4977): Notifying id token listeners about user ( some UID ).
D/FirebaseAuth( 4977): Notifying auth state listeners about user ( some UID ).
что, я полагаю, вероятно, означает изменение статуса пользователя, но при входе в систему он напечатает оболочку + пользователь; в функции регистрации этого не произойдет, что означает, что провайдер в оболочке не получит изменения, и главный экран не может быть отображен. Может ли кто-нибудь сказать мне, где я сделал не так?