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

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

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

person yathavan    schedule 27.04.2021    source источник
comment
это потому, что return вызывается до завершения функции .map, попробуйте напечатать isDependvalue внутри функции .map.   -  person Mohamed Inshaf    schedule 27.04.2021
comment
@MohamedInshaf - я пробовал печатать внутри функции карты, но это не отображается   -  person yathavan    schedule 27.04.2021
comment
затем проверьте, проходят ли данные через список вопросов, попробуйте распечатать их вне функции карты   -  person Mohamed Inshaf    schedule 27.04.2021
comment
а также вы должны использовать ожидание, чтобы получить будущие данные   -  person Mohamed Inshaf    schedule 27.04.2021
comment
Я использовал FutureBuilder для получения этих данных, я также добавил этот код, пожалуйста, проверьте.   -  person yathavan    schedule 27.04.2021


Ответы (2)


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

Кстати, я не уверен, что эти функции должны быть Future.

person Tom Rivoire    schedule 27.04.2021

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;
      }
    });
person Mittal Varsani    schedule 27.04.2021