Flutter - 在future函数之后从getter中获取值

Posted

技术标签:

【中文标题】Flutter - 在future函数之后从getter中获取值【英文标题】:Flutter - Get the value from getter after the future function 【发布时间】: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 的新手。非常感谢您的帮助。

【问题讨论】:

看看这个帖子的答案:***.com/questions/54515186/… 【参考方案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()的结果,你不能这样做。

以上是关于Flutter - 在future函数之后从getter中获取值的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从 Flutter 中的 Future 函数获取反馈

将 Future 类型化结果从函数分配给 Flutter Widget 中的变量

如何在 Flutter 中返回 Future<Response>?

Flutter:从 Future 中获取价值的正确方法

Flutter Future:构建函数返回 null

Flutter/Dart - 调用一个 Future<String> ...但只需要返回一个 String 的函数