openDatabase method

Future<IDBDatabase?> openDatabase(
  1. String name, {
  2. int? version,
  3. void onUpgradeNeeded(
    1. Event event
    )?,
  4. void onBlocked(
    1. Event event
    )?,
})

Implementation

Future<IDBDatabase?> openDatabase(
  String name, {
  int? version,
  void Function(Event event)? onUpgradeNeeded,
  void Function(Event event)? onBlocked,
}) async {
  if ((version == null) != (onUpgradeNeeded == null)) {
    return Future.error(ArgumentError(
        'version and onUpgradeNeeded must be specified together'));
  }
  try {
    IDBOpenDBRequest? request;
    if (version != null) {
      request = open(name, version);
    } else {
      request = open(name);
    }

    if (onUpgradeNeeded != null) {
      request.onupgradeneeded = onUpgradeNeeded.toJS;
    }

    if (onBlocked != null) {
      request.onblocked = onBlocked.toJS;
    }

    final completer = Completer<void>();

    request.onerror = ((Event _) => completer
        .completeError(request?.error?.message ?? 'Unknown Error!')).toJS;

    request.onsuccess = ((Event _) => completer.complete()).toJS;

    await completer.future;

    return request.result as IDBDatabase?;
  } catch (e, stacktrace) {
    return Future.error(e, stacktrace);
  }
}