在注册屏幕中创建用户后,我想将用户对象传递到新屏幕。但是,尽管用户创建成功,但用户对象在新屏幕中始终为null。我知道可以使用FirebaseAuth.instance.currentUser()
访问当前用户。但是,当用户对象从注册屏幕传递到新屏幕时,为什么它为null?
Future<FirebaseUser> signUpUserWithEmailPass(
String email, String pass) async {
try {
var authResult = await firebaseAuth.createUserWithEmailAndPassword(
email: email,
password: pass,
);
print("On Try");
return authResult.user;
} on PlatformException catch (error) {
throw Exception(errors.toString());
}
}
导航到新屏幕:
void navigateToHomePage(BuildContext context, FirebaseUser user) {
Navigator.push(context, MaterialPageRoute(builder: (context) {
return HomePage(user);
}));
}
更新:已解决 我正在使用BLoC模式,并且忘记了在状态类的构造函数中设置用户对象。这实际上是问题所在!
答案 0 :(得分:0)
它为空,因为它是asynchronous
,方法signUpUserWithEmailPass
返回一个Future
,然后在您调用它时可以将结果传递给navigateToHomeScreen
:
signUpUserWithEmailPass.then((result) => {
print(result);
navigateToHomePage(context,result);
});
答案 1 :(得分:0)
这可能是由于异步功能引起的。在获得结果之前,可能已经传递了用户对象。
因此,请先等待signUpUserWithEmailPass()
函数完成,然后再将其分配给用户对象,如下所示:
user = await signUpUserWithEmailPass("email", "password");
navigateToHomePage(context, user);
为此,您必须使父函数async
。
否则,请执行以下操作:
signUpUserWithEmailPass.then((user) {
navigateToHomePage(context, user);
});
希望有帮助