• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / supabase-flutter / 32036696049
88%

Build:
DEFAULT BRANCH: main
Ran 17 Aug 2026 01:49PM UTC
Jobs 10
Files 106
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

17 Aug 2026 01:47PM UTC coverage: 88.18% (-0.07%) from 88.247%
32036696049

push

github

web-flow
refactor(realtime)!: replace listener callbacks with streams (#1706)

## What

Converts the callback-based listener APIs in `realtime_client` to
broadcast streams, following the precedent set by
`RealtimeClient.onHeartbeat` (#1517).

### `RealtimeClient`

The `onOpen`, `onClose`, `onError`, and `onMessage`
callback-registration methods are now `Stream` getters (the internal
`stateChangeCallbacks` registry is gone):

```dart
client.onOpen.listen((_) => print('socket opened'));
client.onClose.listen((event) => print('socket closed: $event'));
client.onError.listen((error) => print('socket error: $error'));
client.onMessage.listen((message) => print('message: $message'));
```

### `RealtimeChannel`

`onPostgresChanges` and `onBroadcast` no longer take a `callback` and
instead return typed streams, and `onPresenceSync`, `onPresenceJoin`,
`onPresenceLeave`, and `onSystemEvents` are now stream getters.
`onSystemEvents` also emits a typed `RealtimeSystemPayload` instead of a
raw payload:

```dart
final channel = supabase.channel('room');
channel
    .onPostgresChanges(
      event: PostgresChangeEvent.insert,
      schema: 'public',
      table: 'messages',
    )
    .listen((payload) => print(payload.newRecord));
channel.onBroadcast(event: 'cursor-pos').listen(print);
channel.onPresenceSync.listen((_) => print(channel.presenceState()));
channel.subscribe();
```

`subscribe()` no longer takes a status callback. Status changes (with
the error that caused a `channelError`) are exposed on the new
`onStatusChange` stream via the new `RealtimeSubscribeStatusChange`
class:

```dart
channel.onStatusChange.listen((change) {
  print('${change.status} ${change.error ?? ''}');
});
channel.subscribe();
```

All channel streams complete when the channel closes.

## Why

Streams are the idiomatic Dart shape for event listeners: consumers get
`listen`/`map`/`where`/`firstWhere`/`timeout`, multiple subscribers,
and, most importantly, easy listener removal via
`StreamSubscri... (continued)

109 of 122 new or added lines in 4 files covered. (89.34%)

5767 of 6540 relevant lines covered (88.18%)

4.14 hits per line

Uncovered Changes

Lines Coverage ∆ File
6
94.04
0.15% packages/supabase_realtime/lib/src/realtime_channel.dart
4
95.45
-1.55% packages/supabase_realtime/lib/src/realtime_client.dart
2
81.55
-0.88% packages/supabase_realtime/lib/src/types.dart
1
87.43
0.39% packages/supabase/lib/src/supabase_stream_builder.dart
Jobs
ID Job ID Ran Files Coverage
8 supabase - 32036696049.8 17 Aug 2026 01:51PM UTC 13
87.32
GitHub Action Run
9 supabase_realtime - 32036696049.9 17 Aug 2026 01:51PM UTC 12
90.19
GitHub Action Run
10 supabase_flutter - 32036696049.10 17 Aug 2026 01:49PM UTC 10
81.87
GitHub Action Run
6 supabase_storage - 32034091672.6 17 Aug 2026 01:18PM UTC 8
97.18
GitHub Action Run
2 yet_another_json_isolate - 32034091672.2 17 Aug 2026 01:16PM UTC 1
94.44
GitHub Action Run
4 supabase_common - 32034091672.4 17 Aug 2026 01:16PM UTC 16
99.48
GitHub Action Run
3 supabase_functions - 32034091672.3 17 Aug 2026 01:16PM UTC 3
97.75
GitHub Action Run
10 postgrest - 32034091672.10 17 Aug 2026 01:19PM UTC 10
85.46
GitHub Action Run
5 iceberg - 32034091672.5 17 Aug 2026 01:16PM UTC 5
68.62
GitHub Action Run
9 supabase_auth - 32034091672.9 17 Aug 2026 01:20PM UTC 28
89.75
GitHub Action Run
Source Files on build 32036696049
  • Tree
  • List 106
  • Changed 7
  • Source Changed 7
  • Coverage Changed 6
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32036696049
  • 07345bf9 on github
  • Prev Build on main (#32034091672)
  • Next Build on main (#32183188729)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc