Я пытаюсь закодировать доступ sql к базе данных с помощью sqljocky в Dart. Поскольку я хочу произвести некоторые вычисления с результатом, возвращаемым моим обработчиком базы данных, метод возвращает Future.
Но когда я пытаюсь запустить его, я получаю следующую ошибку:
Uncaught Error: The null object does not have a method 'then'`
Я запустил отладчик и обнаружил, что эта ошибка возникает:
db.query('select * from user where email="$email"').then(...)
но предложение catchError не срабатывает.
Мой метод обработчика:
// db is a ConnectionPool
Future<Map<String,String>> queryUser(String email){
print(email);
db.query('select * from user where email="${email}"').then((result) { // here raise the error
Map<String,String> results = new Map<String,String>();
result.forEach((row){
results['status'] = '200';
results['ID'] = row[0];
results['Image'] = row[1];
results['Name'] = row[2];
results['Email'] = row[3];
results['Password'] = row[4];
});
return results;
}).catchError((error){
Map<String,String> results = new Map<String,String>();
results['status'] = '500';
return results;
});
}
И метод, вызывающий этот обработчик:
List getUser(String email) {
Future<Map<String,String>> result = dbhandler.queryUser(email);
result.then((Map<String,String> result) {
String statuscode = result['status'];
result.remove('status');
String json = JSON.encode(result);
List pair = new List();
pair.add(statuscode);
pair.add(json);
return pair;
});
Если я запустил запрос непосредственно в phpmyadmin, он вернет правильные данные, значит, он правильный.
Может кто-нибудь подскажет, как это решить?