【问题标题】:Flutter future Boolean function always return default value [duplicate]Flutter未来布尔函数总是返回默认值[重复]
【发布时间】:2021-07-20 10:48:02
【问题描述】:

我在该函数中有一个 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);
    }
  }

【问题讨论】:

  • 那是因为在 .map 函数结束之前调用了 return 尝试在 .map 函数中打印 isDependvalue
  • @MohamedInshaf - 我尝试在地图功能中打印,但没有显示
  • 然后检查数据是否通过“问题”列表,尝试在地图功能之外打印它
  • 而且你必须使用 await 来获取未来的数据
  • 我使用 FutureBuilder 来获取这些数据,我添加的代码也请检查。

标签: flutter dart flutter-futurebuilder flutter-future flutter-functional-widget


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    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;
          }
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2017-11-23
      • 2016-07-22
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多