颤动异步到同步编程

Posted

技术标签:

【中文标题】颤动异步到同步编程【英文标题】:flutter async to sync programming 【发布时间】:2020-02-13 09:05:02 【问题描述】:

可能只有我一个人,但 Flutter 中的异步编程似乎是一场绝对的噩梦。 javascript/typescript 中非常简单的东西似乎变得不必要地困难。例如,我正在尝试创建一个简单的函数来检查用户是否经过身份验证:

Future<bool> isLoggedIn() async 
  var user = await FirebaseAuth.instance.currentUser();
  return user == null ? false : true;

然后在这样的场景中使用这个函数:

Widget _buildChild() async 
    var auth = await user.isLoggedIn();
    if (auth) 
      return new Navigation();
     else 
      return new LoginUI();
    

但是第二个函数也需要返回一个future?

标记为“异步”的函数必须具有可分配给“未来”的返回类型。

使用 then() 而不是 await 也不起作用。在同步上下文中使用异步编程之前,我曾多次遇到过这个问题。也许只是它的外观和感觉与 Promises 非常相似,我完全错过了文档中的功能。

【问题讨论】:

【参考方案1】:

你可以这样改变你的代码:

Widget _buildChild() 
  return FutureBuilder(builder: (context, AsyncSnapshot<bool> snapshot) 
    if (snapshot.hasData)
      return snapshot.data ? Navigation() : LoginUI();
    else
      return Container();
  ,
  future: user.isLoggedIn(),);

它同步返回小部件。如果还没有数据 - 它返回空的Container,并且当isLoggedIn() 返回值时 - 此方法将返回所需的小部件

【讨论】:

它有效!真棒快速反应。但是这是如何工作的,或者是否有任何好的文档可以更详细地解释未来构建者? 看这个解释:medium.com/nonstopio/… 为了处理一些异步操作,我建议在官方网站上查看FutureBuilderStreamBuilder api.flutter.dev/flutter/widgets/widgets-library.html

以上是关于颤动异步到同步编程的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript异步编程

python网络编程基础(线程与进程并行与并发同步与异步)

网络编程释疑之:同步,异步,阻塞,非阻塞

异步编程之同步异步生成器函数

NET 中的 async/await 异步编程

究竟什么是异步编程?