我有一个小部件,它使用了一个返回UserData变量的Future - async,但是由于某些原因,我得到了一个Future变量。
小部件构建中的一行代码:
dynamic user = Auth.signIn(_email, _password);身份验证类:
Future<UserData> signIn(String email, String password) async {
try{
UserCredential userCredential = await _auth.signInWithEmailAndPassword(
email: email,
password: password
);
print('signed in!');
return _createUserFromFirebase(userCredential.user.uid, null);
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
print('No user found for that email.');
} else if (e.code == 'wrong-password') {
print('Wrong password provided for that user.');
}
return null;
}
}发布于 2020-10-02 23:54:43
你可以尝试像这样的东西
return Future.value(_createUserFromFirebase(userCredential.user.uid, null);
而不是
return _createUserFromFirebase(userCredential.user.uid, null);
发布于 2020-10-02 22:54:13
如果Async不在带有await的函数中,则不能使用它。在不异步加载的情况下,您不能在脚本中随机地随机检索异步变量,因为将来可能没有准备好使用的数据。
如果需要在小部件中包含未来变量的未来值,请尝试使用FutureBuilder小部件。这将使得用户数据被异步加载,并且可以在加载之前显示您选择的占位符。这将允许您在小部件中使用UserData类型。
或者,您可以通过让按钮具有一个异步变量来获取用户,该变量在登录后将小部件中的变量从null设置为UserData。
发布于 2020-10-03 01:05:47
我已经在小部件类中添加了一个新的未来方法,它将用户保存在一个变量中:
Future<void> getUserData(String email, String password) async{
_user = await _auth.signIn(email, password);
print('user: $_user');
}https://stackoverflow.com/questions/64173503
复制相似问题