Нужно чуть больше деталей — пришлите полный текст ошибки и кусок кода (включая определение таблицы/DAO и то, как вы вызываете метод). Пока этого нет — перечислю наиболее вероятные причины и готовые решения.
Частые причины ошибки с методом вида
Future<bool> isEmEx(String email) async { ... }
при работе с Drift
1) Несоответствие типа возвращаемого значения и результата SQL
- Drift/SQLite не всегда автоматически преобразует произвольный результат запросов в bool. Например, запросы вроде SELECT COUNT(*) или SELECT EXISTS(...) возвращают целое (0/1), и если в DAO вы объявили Future<bool>, генератор может ругаться.
Решение: вернуть int и сравнить > 0 в коде, или вручную распарсить результат.
Примеры:
- Через селектор таблицы:
Future<bool> isEmEx(String email) async {
final user = await (select(users)..where((u) => u.email.equals(email))).getSingleOrNull();
return user != null;
}
- Через COUNT:
@Query('SELECT COUNT(*) FROM users WHERE email = :email')
Future<int> countByEmail(String email);
// затем в коде: return await countByEmail(email) > 0;
- Через customSelect (если нужно получить EXISTS):
final row = await customSelect(
'SELECT EXISTS(SELECT 1 FROM users WHERE email = ?)',
variables: [Variable.withString(email)],
readsFrom: {users},
).getSingle();
final existsInt = row.data.values.first as int;
return existsInt == 1;
2) Неправильная сигнатура метода в DAO/Аннотациях
- Если вы используете @Query с неподдерживаемым типом возврата (например, сложный/неизвестный тип), генератор drift выдаст ошибку. Проверьте, что сигнатура метода соответствует тому, что возвращает SQL.
- Для одиночной записи используйте getSingle() / getSingleOrNull(), для списка — get(), для потоков — watch().
3) Проблемы с генерацией кода
- Возможно, вы изменили сигнатуры, но не перегенерировали код. Запустите:
flutter pub run build_runner build --delete-conflicting-outputs
или
dart run build_runner build --delete-conflicting-outputs
4) Неправильное определение таблицы (тип столбца)
- Если столбец в таблице объявлен как int, но вы ожидаете bool, это может вызвать несоответствие. Убедитесь, что типы столбцов и ожидаемые Dart‑типы согласованы.
Если пришлёте точный текст ошибки и соответствующий кусок кода (таблицы/DAO/метод), я скажу точно, в чём проблема и дам конкретный исправленный пример.