Пока вы привели только сигнатуру функции, точную причину сказать нельзя. Приведу самые частые ошибки, которые возникают в подобных случаях, и как их исправить — вероятно одна из них подходит.
1) Нет return / неверный тип возвращаемого значения
- Функция объявлена как async и возвращает Future<bool>, но внутри нет return или возвращается void/null. Это даёт ошибку типа или "Missing return".
Решение: вернуть bool, например
Future<bool> isEmEx(String email) async {
// ... вычисления
return true; // или false
}
2) Возврат null при включённым null-safety
- Если после вычислений вы возвращаете null, а сигнатура Future<bool> (не nullable), это ошибка. Либо поменяйте тип на Future<bool?>, либо возвращайте true/false.
3) Асинхронный forEach / использование then с async-замыканием
- Частая ловушка: пытаются использовать await внутри .forEach или внутри .then и ожидают, что внешний код дождётся завершения. Пример плохого кода:
snapshot.docs.forEach((doc) async { if (...) exists = true; });
В этом случае async-замыкания не дожидаются, и функция может вернуть раньше.
Решение: используйте for (var doc in snapshot.docs) { ... } с await или соберите результаты и await их явно.
4) Неправильная работа с Firestore/Future
- Если вы делаете запрос к БД и не дожидаетесь результата (забыли await), функция вернёт Future сразу. Убедитесь, что используете await при вызове асинхронных методов:
final snap = await FirebaseFirestore.instance.collection(...).get();
return snap.docs.isNotEmpty;
Если хотите, пришлите полный код функции и текст ошибки — тогда дам точную правку и пример исправленного кода.