Логическая функция Flutter future всегда возвращает значение по умолчанию [дубликат]

У меня есть булева функция Future в этой функции. Я проверил некоторые данные с помощью функции карты. if и else оба условия устанавливают, что логическая переменная истинна. но он всегда возвращает ложное значение по умолчанию. ниже код - моя функция.

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

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

Если ваша цель - повторить questions.dependFieldslist, то forEach кажется более подходящим.

Я не уверен, что эту функцию нужно Future Кстати.

Другие вопросы по тегам