Skip to content

Commit 3047e9c

Browse files
committed
fix: load postgrest before realtime conn and close realtime on error
1 parent d27dfda commit 3047e9c

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

packages/supabase/lib/src/supabase_stream_builder.dart

+15-6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,9 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
7676
/// Count of record to be returned
7777
int? _limit;
7878

79+
/// Flag if the stream has at least one time been subscribed to realtime
80+
bool _gotSubscribed = false;
81+
7982
SupabaseStreamBuilder({
8083
required PostgrestQueryBuilder queryBuilder,
8184
required String realtimeTopic,
@@ -209,14 +212,15 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
209212
.subscribe((status, [error]) {
210213
switch (status) {
211214
case RealtimeSubscribeStatus.subscribed:
212-
// Get first data when realtime is subscribed and reload all data
213-
// from postgrest if e.g. got a channel error and is resubscribed
214-
_getPostgrestData();
215+
// Reload all data after a reconnect from postgrest
216+
// First data from postgrest gets loaded before the realtime connect
217+
if (_gotSubscribed) {
218+
_getPostgrestData();
219+
}
220+
_gotSubscribed = true;
215221
break;
216222
case RealtimeSubscribeStatus.closed:
217-
if (!(_streamController?.isClosed ?? true)) {
218-
_streamController?.close();
219-
}
223+
_streamController?.close();
220224
break;
221225
case RealtimeSubscribeStatus.timedOut:
222226
_addException(RealtimeSubscribeException(status, error));
@@ -226,6 +230,7 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
226230
break;
227231
}
228232
});
233+
_getPostgrestData();
229234
}
230235

231236
Future<void> _getPostgrestData() async {
@@ -271,6 +276,10 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
271276
_addStream();
272277
} catch (error, stackTrace) {
273278
_addException(error, stackTrace);
279+
// In case the postgrest call fails, there is no need to keep the
280+
// realtime connection open
281+
_channel?.unsubscribe();
282+
_streamController?.close();
274283
}
275284
}
276285

0 commit comments

Comments
 (0)