Логическая функция 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.dependFields
list, то forEach кажется более подходящим.
Я не уверен, что эту функцию нужно
Future
Кстати.