initialize method

  1. @override
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;
}