From e28f372ae749fb1b1dcb2ed724b232624cff57d9 Mon Sep 17 00:00:00 2001 From: Wenhao Wu Date: Thu, 7 Oct 2021 11:17:40 +0300 Subject: [PATCH] Get indexDB selectively based on window property --- hive/lib/src/backend/js/backend_manager.dart | 13 ++++++++----- hive/lib/src/backend/js/storage_backend_js.dart | 6 +++++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/hive/lib/src/backend/js/backend_manager.dart b/hive/lib/src/backend/js/backend_manager.dart index b86d8f9b2..8d9d02781 100644 --- a/hive/lib/src/backend/js/backend_manager.dart +++ b/hive/lib/src/backend/js/backend_manager.dart @@ -1,17 +1,20 @@ import 'dart:html'; import 'dart:indexed_db'; - +import 'dart:js' as js; import 'package:hive/hive.dart'; import 'package:hive/src/backend/js/storage_backend_js.dart'; import 'package:hive/src/backend/storage_backend.dart'; /// Opens IndexedDB databases class BackendManager implements BackendManagerInterface { + IdbFactory? get indexedDB => js.context.hasProperty('window') + ? window.indexedDB + : WorkerGlobalScope.instance.indexedDB; + @override Future open( String name, String? path, bool crashRecovery, HiveCipher? cipher) async { - var db = - await window.indexedDB!.open(name, version: 1, onUpgradeNeeded: (e) { + var db = await indexedDB!.open(name, version: 1, onUpgradeNeeded: (e) { var db = e.target.result as Database; if (!db.objectStoreNames!.contains('box')) { db.createObjectStore('box'); @@ -23,7 +26,7 @@ class BackendManager implements BackendManagerInterface { @override Future deleteBox(String name, String? path) { - return window.indexedDB!.deleteDatabase(name); + return indexedDB!.deleteDatabase(name); } @override @@ -31,7 +34,7 @@ class BackendManager implements BackendManagerInterface { // https://stackoverflow.com/a/17473952 try { var _exists = true; - await window.indexedDB!.open(name, version: 1, onUpgradeNeeded: (e) { + await indexedDB!.open(name, version: 1, onUpgradeNeeded: (e) { e.target.transaction!.abort(); _exists = false; }); diff --git a/hive/lib/src/backend/js/storage_backend_js.dart b/hive/lib/src/backend/js/storage_backend_js.dart index 92bf9b257..ccc2ab5a9 100644 --- a/hive/lib/src/backend/js/storage_backend_js.dart +++ b/hive/lib/src/backend/js/storage_backend_js.dart @@ -3,6 +3,7 @@ import 'dart:html'; import 'dart:indexed_db'; import 'dart:js_util'; import 'dart:typed_data'; +import 'dart:js' as js; import 'package:hive/hive.dart'; import 'package:hive/src/backend/storage_backend.dart'; @@ -199,6 +200,9 @@ class StorageBackendJs extends StorageBackend { @override Future deleteFromDisk() { - return window.indexedDB!.deleteDatabase(_db.name!); + final indexDB = js.context.hasProperty('window') + ? window.indexedDB + : WorkerGlobalScope.instance.indexedDB; + return indexDB!.deleteDatabase(_db.name!); } }