首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Future<UserData>返回Future<UserData>而不是UserData变量

Future<UserData>返回Future<UserData>而不是UserData变量
EN

Stack Overflow用户
提问于 2020-10-02 22:42:00
回答 3查看 91关注 0票数 0

我有一个小部件,它使用了一个返回UserData变量的Future - async,但是由于某些原因,我得到了一个Future变量。

小部件构建中的一行代码:

代码语言:javascript
复制
dynamic user = Auth.signIn(_email, _password);

身份验证类:

代码语言:javascript
复制
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;
    }
  }
EN

回答 3

Stack Overflow用户

发布于 2020-10-02 23:54:43

你可以尝试像这样的东西

return Future.value(_createUserFromFirebase(userCredential.user.uid, null);

而不是

return _createUserFromFirebase(userCredential.user.uid, null);

票数 1
EN

Stack Overflow用户

发布于 2020-10-02 22:54:13

如果Async不在带有await的函数中,则不能使用它。在不异步加载的情况下,您不能在脚本中随机地随机检索异步变量,因为将来可能没有准备好使用的数据。

如果需要在小部件中包含未来变量的未来值,请尝试使用FutureBuilder小部件。这将使得用户数据被异步加载,并且可以在加载之前显示您选择的占位符。这将允许您在小部件中使用UserData类型。

或者,您可以通过让按钮具有一个异步变量来获取用户,该变量在登录后将小部件中的变量从null设置为UserData。

票数 0
EN

Stack Overflow用户

发布于 2020-10-03 01:05:47

我已经在小部件类中添加了一个新的未来方法,它将用户保存在一个变量中:

代码语言:javascript
复制
  Future<void> getUserData(String email, String password) async{
    _user = await _auth.signIn(email, password);
    print('user: $_user');
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64173503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档