openDatabaseOnDowngradeDelete method

Future<SdbDatabase> openDatabaseOnDowngradeDelete(
  1. String name, {
  2. int? version,
  3. SdbOnVersionChangeCallback? onVersionChange,
})

Open a database.

Implementation

Future<SdbDatabase> openDatabaseOnDowngradeDelete(
  String name, {
  int? version,
  SdbOnVersionChangeCallback? onVersionChange,
}) async {
  Future<SdbDatabase> doOpen() {
    return openDatabase(
      name,
      version: version,
      onVersionChange: onVersionChange,
    );
  }

  if (version == null) {
    return doOpen();
  }
  try {
    return await doOpen();
  } catch (e) {
    // ignore: avoid_print
    print('openOnDowngradeDelete: error ${e.runtimeType} $e');

    /// There is no good way to detect a downgrade, try to open without version to check the version
    var db = await openDatabase(name);
    var isDowngrade = version < db.version;
    await db.close();

    if (isDowngrade) {
      await deleteDatabase(name);
    } else {
      rethrow;
    }
    return await doOpen();
  }
}