【问题标题】: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 非常相似,我完全错过了文档中的功能。

【问题讨论】:

    标签: firebase asynchronous flutter dart


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

    【讨论】:

    猜你喜欢
    • 2010-10-24
    • 2019-06-14
    • 2021-05-07
    • 2016-09-28
    • 1970-01-01
    • 2020-09-19
    • 2022-07-11
    • 2013-08-01
    • 2016-10-16
    相关资源
    最近更新 更多