我正在尝试开发一个带有用户注册和登录功能的简单应用程序。每当我尝试使用数据库中不存在的用户名登录时,我想显示消息“没有这样的用户”或类似的内容。我正在尝试处理 Bad State: no Element 异常,但该异常似乎不是“可捕获的”。
起初我的代码是:
Future<Users> fetchByUsername(String nomeUtente) async {
final database = await DatabaseService("users.db").database;
final users = await database.rawQuery('''SELECT * from $tableName WHERE nomeUtente = ?''', [nomeUtente]);
return Users.fromSqfliteDatabase(users.first);
}
然后我把它改成:
Future<Users?> fetchByUsername(String nomeUtente) async {
final database = await DatabaseService("users.db").database;
try {
final users = await database.rawQuery('''SELECT * from $tableName WHERE nomeUtente = ?''', [nomeUtente]);
return Users.fromSqfliteDatabase(users.first);
} on Exception catch (e) {
return null;
}
}
但是什么也没有发生,而且一般来说 IDE 本身不鼓励使用“Exception”关键字。 我想返回一个假用户,或者在找不到用户时返回 null。
编辑:我目前正在通过使用 fetchAll 函数并运行 for 循环 来检查用户是否存在来解决这个问题。 For循环可能会很麻烦,所以我想通过select查询来解决它。
这是我的用户课程!
class Users {
final String nomeUtente;
final String email;
final String password;
final String dataNascita;
Users({
required this.nomeUtente,
required this.email,
required this.password,
required this.dataNascita,
});
factory Users.fromSqfliteDatabase(Map<String, dynamic> map) => Users (
nomeUtente: map['nomeUtente']?.toString() ?? '',
email: map['email']?.toString() ?? '',
password: map['password']?.toString() ?? '',
dataNascita: map['dataNascita']?.toString() ?? '',
);
}
您是否尝试过使用 catch 而不警告异常?
Future<Users?> fetchByUsername(String nomeUtente) async {
final database = await DatabaseService("users.db").database;
try {
final users = await database.rawQuery('''SELECT * from $tableName WHERE nomeUtente = ?''', [nomeUtente]);
return Users.fromSqfliteDatabase(users.first);
} catch (e) {
return null;
}
}