Flutter未来的布尔函数总是返回默认值

问题描述

我在该函数中有一个 Future 布尔函数,我使用 map 函数检查了一些数据。 if 和 else 两个条件都设置布尔变量为真。但它总是返回默认的 false 值。下面的代码是我的功能。

  Future<bool> checkisShowablebydepend(Questions questions) async {
    bool isDependvalue = false;

    questions.dependFields.map((e) async {
      bool isequal = (questions.dependValue.toLowerCase() ==
          _formKey.currentState.fields[e].value.toLowerCase());

      if (isequal) {
        isDependvalue = true;
      } else {
        isDependvalue = true;
      }
    });

    return isDependvalue;
  }

这是我从上述函数中获取数据的方式。

  Widget loadWidgets(Questions questions) {
    if (questions.depend) {
      return FutureBuilder<bool>(
          future: checkisShowablebydepend(questions),builder: (BuildContext context,AsyncSnapshot<bool> snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
                return new Text('Press button to start');
              case ConnectionState.waiting:
                return new Text('Awaiting result...');
              default:
                if (snapshot.hasError)
                  return new Text('Error: ${snapshot.error}');
                else
                  return new Text('Result: ${snapshot.data}');
            }
          });
    } else {
      return selectFormfield(questions);
    }
  }

解决方法

如果您的目标是遍历 questions.dependFields 列表,那么 forEach 似乎更合适。

顺便说一下,我不确定这个函数是否需要 Future

,

Async 表示此函数是异步的,您可能需要 稍等片刻即可得到结果。

Await 表示 - 在这里等待,直到此功能完成,您将 获取它的返回值。

await 关键字仅在异步函数中有效。

您已将函数设置为sync,因此您可以使用await关键字等待比较结果

questions.dependFields.map((e) async {
      bool isequal = await (questions.dependValue.toLowerCase() ==
          _formKey.currentState.fields[e].value.toLowerCase());

      if (isequal) {
        isDependvalue = true;
      } else {
        isDependvalue = true;
      }
    });

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...