openDatabaseOnDowngradeDelete method
Future<SdbDatabase>
openDatabaseOnDowngradeDelete(
- String name, {
- SdbOpenDatabaseOptions? options,
- int? version,
- SdbOnVersionChangeCallback? onVersionChange,
Open a database, deleting it on downgrade.
This is a convenient helper for development to handle hot-restart. If a downgrade is detected, the database is deleted and re-opened.
Implementation
Future<SdbDatabase> openDatabaseOnDowngradeDelete(
String name, {
/// Options for opening a Sdb database (prefer options over version and schema).
SdbOpenDatabaseOptions? options,
int? version,
SdbOnVersionChangeCallback? onVersionChange,
}) async {
Future<SdbDatabase> doOpen() {
return openDatabase(
name,
options: options,
version: version,
onVersionChange: onVersionChange,
);
}
version ??= options?.version;
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();
}
}