Flutter中sqflite无法捕获无效数据库文件异常求助
解决sqflite_common_ffi打开无效数据库文件时异常无法捕获的问题
问题根源
openDatabase 是异步方法,你的代码没有使用 await 等待其执行完成,导致异步抛出的异常无法被同步的 try-catch 块捕获。另外,堆栈信息显示抛出的是 SqfliteFfiException,需要明确捕获该类型异常(或更通用的异常类型)。
修正后的代码示例
import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'dart:developer' as dev; // 确保在异步函数中执行数据库操作 Future<void> openDatabaseSafely() async { try { final database = await openDatabase( databaseFile!.path!, version: 1, ); // 数据库打开成功后的后续操作 } on SqfliteFfiException catch (e) { dev.log('无效数据库文件错误: ${e.message}'); } catch (e) { dev.log('其他未知错误: $e'); } }
关键说明
- 必须在异步函数中通过
await调用openDatabase,这样异步抛出的异常才能被try-catch捕获。 - 优先捕获具体的
SqfliteFfiException(堆栈中明确抛出的异常类型),再用通用catch块兜底处理其他异常。 - 若要捕获
DatabaseException,需确保导入对应包,但针对sqflite_common_ffi场景,SqfliteFfiException是更精准的捕获类型。
内容的提问来源于stack exchange,提问作者coder19
相关产品推荐
相关产品推荐

