无法将Firebaseuser对象传递到Flutter中的新屏幕

时间:2019-12-29 10:59:22

标签: firebase flutter firebase-authentication

在注册屏幕中创建用户后,我想将用户对象传递到新屏幕。但是,尽管用户创建成功,但用户对象在新屏幕中始终为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模式,并且忘记了在状态类的构造函数中设置用户对象。这实际上是问题所在!

2 个答案:

答案 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);
});

希望有帮助