如何返回Firebase用户访问某些元素

时间:2019-04-09 20:59:17

标签: firebase dart flutter firebase-authentication

我试图在一个文件中编写一个函数,以使当前登录的用户进入其他文件。

现在,我只是让它返回用户,但是,当调用该函数时,我在控制台中获得了Firebase User的实例。尝试使用getSignedInUser()。uid时,它说类'Future'没有实例获取方法'uid'。如果在我的功能范围内,我可以打印出mCurrentUser.uid(到控制台),则可以得到正确的打印输出。我不想在控制台中使用它。如果在另一个文件中,例如,我想访问当前用户的电子邮件,我想调用该函数,例如getSignedInUser()。email(当函数返回该用户时)

在authentication.dart中:

getSignedInUser() async {
  mCurrentUser = await FirebaseAuth.instance.currentUser();
  if(mCurrentUser == null || mCurrentUser.isAnonymous){
    print("no user signed in");
  }
  else{
    return mCurrentUser;
    //changing above line to print(mCurrentUser.uid) works, but that's useless 
    //for the purpose of this function
  }
}

登录后在homescreen.dart中,有一个按钮可以检查当前用户:

Widget checkUserButton() {
    return RaisedButton(
      color: Color.fromRGBO(58, 66, 86, 1.0),
      child: Text("who's signed in?", style: TextStyle(color: Colors.white)),
      onPressed: () {
        print(getSignedInUser().uid);
        //applying change to comments in getSignedInUser() function above 
        //changes this to just call getSignedInUser()
      },
    );
  }

我希望这将从getSignedInUser()函数中返回用户,并允许我使用Firebase Auth类中的内置函数。但是,它们不会像预期的那样自动填充,只是如上所述抛出运行时错误。我只将其打印到控制台上以查看我的输出作为测试。一旦知道要访问的字段(例如用户ID),就可以使用该信息在其他屏幕上执行所需的操作(只要导入了authentication.dart)。感谢您的协助

1 个答案:

答案 0 :(得分:1)

您忘记了getSignedInUser函数是一个异步函数,因此在您的情况下,它会返回一个Future<FirebaseUser>实例的Future对象。您正在尝试从Future对象实例中读取uid属性,这就是为什么您收到错误消息的原因: “未来”没有实例获取程序“ uid”

要解决此问题,您只需await函数即可读取正确的结果。

Widget checkUserButton() {
    return RaisedButton(
      color: Color.fromRGBO(58, 66, 86, 1.0),
      child: Text("who's signed in?", style: TextStyle(color: Colors.white)),
      onPressed: () async { // make on pressed async
        var fbUser = await = getSignedInUser(); // wait the future object complete
        print(fbUser.uid); // gotcha!
        //applying change to comments in getSignedInUser() function above 
        //changes this to just call getSignedInUser()
      },
    );
  }