【问题标题】:Flutter - Get the value from getter after the future functionFlutter - 在future函数之后从getter中获取值
【发布时间】:2020-11-21 22:45:39
【问题描述】:

我有一些这样的代码:

  Future<FirebaseUser> _getUser() async {
    return await _fireAuth.currentUser();
  }

  bool get isSignedIn {
    _getUser().then((value) {
      return value != null;
    }).catchError((err) {
      print("Error While knowing isSignedIn --> $err");
    });
  }

基本上,我如何让代码在从未来函数(即_getUser())获取数据时等待,然后通过getter(即isSignedIn)返回结果。使用此代码,isSignedIn getter 的结果为 null

我还是 Flutter 的新手。非常感谢您的帮助。

【问题讨论】:

标签: firebase flutter dart firebase-authentication


【解决方案1】:

实际上,我认为您想要的是 Stream。当用户登录或注销时,您的 Stream 会更新。

Stream<FirebaseUser> get isSignedIn => _fireauth.onAuthChanged; 

【讨论】:

    【解决方案2】:

    如果我理解正确,我相信您正在尝试获取 .then() 中函数返回的值。你不能。至少不是你想要做的那样。

    据我了解,.then() 的返回值可以用作下一个.then() 的参数,如果你要链接它们的话。例如。 getuser().then(({return value of getUser})) =&gt; user).then(({this is the user}) =&gt; user.uid).then(({this is the user.uid})) ; //...etc

    如果您想捕获在.then() 内部计算的值,则必须在外部有一个变量,其值将保存结果。

    例如

    var myuser;
    getUser().then((user) => myuser = user);
    
    

    不完全是你的代码,但你明白了。

    否则,我认为最好的做法是尽可能避免使用 then。使用 await 可以让您编写看起来同步且更易于阅读的代码。

    例如 var user = await getUser()

    这里,你根本不需要.then()

    【讨论】:

      【解决方案3】:
      Future<bool> get isSignedIn async {
        try { 
          var user = await _getUser(); // wait for the function to finish
          return Future.value(user != null);
        catch (error) {
          print("Error While knowing isSignedIn --> $err");
        }
      }
      

      你可以试试。

      【讨论】:

        【解决方案4】:

        当你调用async函数_getUser()时,你必须返回一个Future&lt;bool&gt;

        Future<bool> get isSignedIn async {
          try { 
            var user = await _getUser(); // wait for the function to finish
            return user != null;
          catch (error) {
            print("Error While knowing isSignedIn --> $err");
          }
        }
        

        【讨论】:

        • 其实和我做的_getUser函数差不多。使用这个我将不得不编写 then 方法,我将在其中使用这个 getter。这就是我要避免的事情。
        • 如果你想要async函数_getUser()的结果,你不能这样做。
        猜你喜欢
        • 2021-08-27
        • 2022-10-24
        • 1970-01-01
        • 2019-07-01
        • 2020-01-22
        • 2019-09-11
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多