Flutter使用sqflite出现LateInitializationError数据库未初始化错误如何解决
问题根因与修复方案
报错核心由以下几个代码错误导致:
- 对
late修饰的_database变量做非空判断:late修饰的非空类型变量在未初始化时直接访问会直接抛出初始化异常,不会返回null,原有判断逻辑完全失效 - 建表SQL语法错误:
projectName VARCHAR字段后多了多余的逗号,会导致表创建失败 createClient方法中调用db.insert未加await,无法正常拿到插入结果getClients方法中result初始化逻辑错误,强制将空Map转为List会触发类型转换异常
修复后的DatabaseProvider代码
final clientTABLE = 'ClientDetails'; class DatabaseProvider { static final DatabaseProvider dbProvider = DatabaseProvider(); // 改为可空类型,避免late变量未初始化访问报错 Database? _database; Future<Database> get database async { if (_database != null) return _database!; _database = await createDatabase(); return _database!; } Future<Database> createDatabase() async { Directory documentsDirectory = await getApplicationDocumentsDirectory(); String path = join(documentsDirectory.path, "Client.db"); var database = await openDatabase(path, version: 1, onCreate: initDB); return database; } Future initDB(Database database, int version) async { // 去掉最后一个字段后的多余逗号 await database.execute("CREATE TABLE IF NOT EXISTS $clientTABLE (" "firstName VARCHAR, " "lastName VARCHAR, " "whatsappNo VARCHAR, " "email VARCHAR PRIMARY KEY, " "location VARCHAR, " "projectName VARCHAR" ")"); } }
修复后的ClientProvider代码
class ClientProvider { final dbProvider = DatabaseProvider.dbProvider; Future<int> createClient(Client client) async { final db = await dbProvider.database; // 增加await等待插入操作完成 var result = await db.insert(clientTABLE, client.toDatabaseJson()); return result; } Future<List<Client>> getClients({List<String>? columns, String? query}) async { final db = await dbProvider.database; // 改为正确的空数组初始化 List<Map<String, dynamic>> result = []; if (query != null) { if (query.isNotEmpty) result = await db.query(clientTABLE, columns: columns, where: 'firstName LIKE ?', whereArgs: ["%$query%"]); } else { result = await db.query(clientTABLE, columns: columns); } List<Client> clients = result.isNotEmpty ? result.map((item) => Client.fromDatabaseJson(item)).toList() : []; return clients; } }
内容的提问来源于stack exchange,提问作者Divyam Dhadwal
相关产品推荐
相关产品推荐

