diff --git a/sqlite3/CHANGELOG.md b/sqlite3/CHANGELOG.md index 0bdb4fc2..e18fb343 100644 --- a/sqlite3/CHANGELOG.md +++ b/sqlite3/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.7.2 + +- Web: Fix update events not being delivered in some shared worker setups. + ## 2.7.1 - Web: Fix a crash when using version `2.7.0` of this package with an older diff --git a/sqlite3/lib/src/implementation/database.dart b/sqlite3/lib/src/implementation/database.dart index 039bb0e2..bb21fea1 100644 --- a/sqlite3/lib/src/implementation/database.dart +++ b/sqlite3/lib/src/implementation/database.dart @@ -609,30 +609,9 @@ final class _StreamHandlers { /// Unregisters the native callback on the database. final void Function() _unregister; - late final Stream stream = Stream.multi( - (newListener) { - if (_database._isClosed) { - newListener.close(); - return; - } - - void addListener() { - _addAsyncListener(newListener); - } + Stream? _stream; - void removeListener() { - _removeAsyncListener(newListener); - } - - newListener - ..onPause = removeListener - ..onCancel = removeListener - ..onResume = addListener; - // Since this is a onListen callback, add listener now - addListener(); - }, - isBroadcast: true, - ); + Stream get stream => _stream!; _StreamHandlers({ required DatabaseImplementation database, @@ -640,7 +619,32 @@ final class _StreamHandlers { required void Function() unregister, }) : _database = database, _register = register, - _unregister = unregister; + _unregister = unregister { + _stream = Stream.multi( + (newListener) { + if (_database._isClosed) { + newListener.close(); + return; + } + + void addListener() { + _addAsyncListener(newListener); + } + + void removeListener() { + _removeAsyncListener(newListener); + } + + newListener + ..onPause = removeListener + ..onCancel = removeListener + ..onResume = addListener; + // Since this is a onListen callback, add listener now + addListener(); + }, + isBroadcast: true, + ); + } bool get hasListener => _asyncListeners.isNotEmpty || _syncCallback != null; diff --git a/sqlite3/pubspec.yaml b/sqlite3/pubspec.yaml index 5007fe57..70aaccd0 100644 --- a/sqlite3/pubspec.yaml +++ b/sqlite3/pubspec.yaml @@ -1,6 +1,6 @@ name: sqlite3 description: Provides lightweight yet convenient bindings to SQLite by using dart:ffi -version: 2.7.1 +version: 2.7.2 homepage: https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3 issue_tracker: https://github.com/simolus3/sqlite3.dart/issues