我试图在一个文件中编写一个函数,以使当前登录的用户进入其他文件。
现在,我只是让它返回用户,但是,当调用该函数时,我在控制台中获得了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)。感谢您的协助
答案 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()
},
);
}