firebase - flutter async 同步编程

标签 firebase asynchronous flutter dart

可能只有我一个人,但 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 ?

标记为“async”的函数必须具有可分配给“Future”的返回类型。

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

最佳答案

您可以通过以下方式更改代码:

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()返回值 - 此方法将返回所需的小部件

关于firebase - flutter async 同步编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58415744/

相关文章:

flutter - socket_io_client 用于套接字连接多次触发

android - Firebase - 无法解析符号 'MyFirebaseMessagingService'

java - android Gradle构建失败任务 ':app: processDebugResources'执行失败

c# - MVC4 + async/await + 在 Action 完成前返回响应

c# - 使用程序集引用 dll 的某些方法时用户界面停止

flutter - 在 Flutter 包中使用自定义图标字体显示问号而不是自定义图标

ios - Swift Firebase 为 UIActivityViewController 附加图像

swift - 个人资料图片和上传按钮 : firebase : swift 4. 0:jpeg 转换为数据时出现问题

git - 从 powershell 启动非阻塞进程

sqlite - Flutter中的Sqflite,使用两个数据库(附件)