Ваша функция возвращает ноль, потому что вы возвращаете isPresent
, не устанавливая его на true
, вы устанавливаете только isPresent = false
, что означает, что в противном случае isPresent
будет нулевым, так как переменные содержат ссылки на объекты, поэтому они будут содержать null
если вы не инициализировали его.
bool isPreset; // isPreset is null
isPreset = true; // isPreset is true
isPreset = false; // isPreset is false
Если переменная не имеет значения, ее значение равно нулю. Всегда инициализируйте ваши переменные чем-либо.
Кроме того, если f.data['userid']
является строкой, вам не нужно снова делать ее строкой, заключив ее в '${}'
Измените свой код to:
Future<bool> _numberCheck(mobileno) async {
QuerySnapshot snapshot = await db.collection("transcriber_user_registeration")
.getDocuments();
snapshot.documents.forEach((f) {
if (f.data['userid'] == mobileno) {
return false;
}
});
return true;
}
И вызовите setState
для результата этой функции, где вы ее вызываете. Или просто используйте FutureBuilder
для непосредственного обращения с результатом и автоматического обновления sh вашего экрана.
Если он возвращает значение true, это означает, что результат сбора запроса является пустой коллекцией или if (f.data['userid'] == mobileno)
никогда не true
. Так что проверьте значения на обоих.