Flutter中await openDatabase()是否会等待onCreate与onUpgrade完成?
Sqflite中openDatabase与onCreate/onUpgrade的执行顺序问题
当你执行await openDatabase()时,会确保等待onCreate或onUpgrade(触发时)完全执行完成,这两个回调并不会在后续异步执行。
具体逻辑是:
- 如果目标数据库不存在,
openDatabase会先触发onCreate回调,等待回调内所有操作(包括异步操作,比如await db.execute)完成后,才会返回数据库实例。 - 如果数据库版本低于指定的
version参数,则触发onUpgrade回调,同样会等待回调内的所有操作执行完毕,再完成数据库的打开流程。
举个实际代码示例:
final db = await openDatabase( 'app_db.db', version: 2, onCreate: (db, version) async { // 这里的异步创建表操作会被openDatabase等待 await db.execute('CREATE TABLE posts(id INTEGER PRIMARY KEY, content TEXT)'); }, onUpgrade: (db, oldVersion, newVersion) async { // 版本升级的异步操作同样会被等待完成 if (oldVersion == 1) { await db.execute('ALTER TABLE posts ADD COLUMN author TEXT'); } }, ); // 此时onCreate/onUpgrade已全部执行完毕,可安全使用db实例进行数据操作
简单来说,openDatabase的整个打开流程是串行的:检查数据库状态 → 执行必要的创建/升级回调(等待完成) → 返回可用的数据库实例。你不需要额外处理回调的异步等待问题,await已经帮你覆盖了这部分逻辑。
内容的提问来源于stack exchange,提问作者Greenlight
相关产品推荐
相关产品推荐

