首页 > 解决方案 > 我的颤动代码没有按照我期望的顺序读取代码

问题描述

在此处输入图像描述

这 3 个函数在一个类中,我使用它们的顺序是下一个:

  1. 调用登录查询。

  2. 如果密码与用户名匹配,它将调用函数loginAccepted()

  3. 此函数将类变量的值更改为 1,这意味着输入的数据是正确的。

到目前为止,代码按他们的方式工作。现在问题来了。

在此处输入图像描述

我有一个ElevatedButton我:

  1. 从另一个类调用loginQuery函数。

  2. 如果userMaster.loginVerification是 1,这意味着数据是正确的,它将显示一个弹出窗口,说明它是正确的。(userMaster是我用来控制该类功能的变量。)

  3. 如果loginVerification不是 1,它还会显示一个弹出窗口来说明它。

在此处输入图像描述

那么,当我尝试我的代码输入有效的用户名和密码时,它显示在左侧,控制台在控制台中显示确认数据是有效用户的打印,但在右侧程序显示弹出窗口好像我输入的数据不是有效用户。

在此处输入图像描述

然后我在控制台中输入userMaster.loginVerification以检查发生了什么,它显示了一个 1,这意味着我输入的数据是有效的,但是弹出窗口的那个值是 0,这没有意义。

我不明白我的代码发生了什么,我开始相信函数是在 aElevatedButton或其他东西中执行的最后一件事,任何帮助将不胜感激。

标签: firebasefunctionflutterclassdart

解决方案


这实际上是这个问题,但它是针对 JS 的,你会感到困惑。不过,这只是async一般的编程。

  1. loginQuery回报成为未来
Future<void> loginQuery() async {
  var docs = await Firestore.instance.collection(...).where(...).getDocuments();
  // existing if statement
  if(docs.documents.isEmpty) {
   ...
  } else {
   ...
  }
}
  1. await你的未来onPressed
onPressed:() async {
  await userMaster.loginQuery(...);
  // now do your if check
}

推荐阅读