You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:09:25