Skip to content

Commit

Permalink
Fix broken stream initialization in some dart2js setups
Browse files Browse the repository at this point in the history
Avoiding a late final field weirdly seems to fix the issue.
  • Loading branch information
simolus3 committed Jan 21, 2025
1 parent 8a95b4f commit 135bbb5
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 25 deletions.
4 changes: 4 additions & 0 deletions sqlite3/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
52 changes: 28 additions & 24 deletions sqlite3/lib/src/implementation/database.dart
Original file line number Diff line number Diff line change
Expand Up @@ -609,38 +609,42 @@ final class _StreamHandlers<T, SyncCallback> {
/// Unregisters the native callback on the database.
final void Function() _unregister;

late final Stream<T> stream = Stream.multi(
(newListener) {
if (_database._isClosed) {
newListener.close();
return;
}

void addListener() {
_addAsyncListener(newListener);
}
Stream<T>? _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<T> get stream => _stream!;

_StreamHandlers({
required DatabaseImplementation database,
required void Function() register,
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;

Expand Down
2 changes: 1 addition & 1 deletion sqlite3/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -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

Expand Down

0 comments on commit 135bbb5

Please sign in to comment.