initialize method
Future<void>
initialize(
)
override
Implementation
@override
Future<void> initialize() async {
if (_db != null) return;
final factory = getIdbFactory();
if (factory == null) {
throw StateError('IndexedDB is unavailable in this browser context');
}
_db = await factory.open(
_dbName,
version: _dbVersion,
onUpgradeNeeded: (event) {
final database = (event.target as OpenDBRequest).result;
if (!database.objectStoreNames.contains(_recordStore)) {
// Out-of-line keys: callers provide the stable record identifier.
database.createObjectStore(_recordStore);
}
},
);
_channel = web.BroadcastChannel('boxx:${storageIdentifier(namespace)}');
_channel!.onmessage = ((web.Event event) {
final data = (event as web.MessageEvent).data.dartify();
if (data is! String) return;
dynamic message;
try {
message = jsonDecode(data);
} on FormatException {
return;
}
if (message is! Map<String, dynamic> ||
message['id'] is! String ||
message['key'] is! String) {
return;
}
final id = message['id'] as String;
if (_rememberChange(id)) {
notifyRemoteListeners(message['key'] as String);
}
}).toJS;
}