Flutter Sqflite:如何处理 Bad State:无 Element 异常?

问题描述 投票:0回答:1

我正在尝试开发一个带有用户注册和登录功能的简单应用程序。每当我尝试使用数据库中不存在的用户名登录时,我想显示消息“没有这样的用户”或类似的内容。我正在尝试处理 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() ?? '',
  );

}
database flutter exception sqflite
1个回答
0
投票

您是否尝试过使用 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;
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.