openDatabaseOnDowngradeDelete method
Future<SdbDatabase>
openDatabaseOnDowngradeDelete(
- String name, {
- SdbOpenDatabaseOptions? options,
- @Deprecated('Use options instead') int? version,
- @Deprecated('Use options instead') 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,
/// Compat
@Deprecated('Use options instead') int? version,
@Deprecated('Use options instead')
/// Compat
SdbOnVersionChangeCallback? onVersionChange,
}) async {
Future<SdbDatabase> doOpen() {
return openDatabase(
name,
options: options,
// ignore: deprecated_member_use_from_same_package
version: version,
// ignore: deprecated_member_use_from_same_package
onVersionChange: onVersionChange,
);
}
version ??= options?.version;
if (version == null) {
return doOpen();
}
try {
return await doOpen();
} catch (e) {
// ignore: avoid_print
print(
'openOnDowngradeDelete(=> $version, $name)}: error ${e.runtimeType} $e, trying opening',
);
/// 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;
// ignore: avoid_print
print(
'openOnDowngradeDelete(${db.version} => $version)}${isDowngrade ? ' downgrade deleting $name' : ' not expected'}',
);
await db.close();
if (isDowngrade) {
await deleteDatabase(name);
} else {
rethrow;
}
return await doOpen();
}
}