Skip to content

Commit 668cfaa

Browse files
committed
fix: Consolidate realtime subscription for stream
1 parent ccfcbf5 commit 668cfaa

File tree

1 file changed

+34
-36
lines changed

1 file changed

+34
-36
lines changed

packages/supabase/lib/src/supabase_stream_builder.dart

Lines changed: 34 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -171,46 +171,44 @@ class SupabaseStreamBuilder extends Stream<SupabaseStreamEvent> {
171171

172172
_channel!
173173
.onPostgresChanges(
174-
event: PostgresChangeEvent.insert,
174+
event: PostgresChangeEvent.all,
175175
schema: _schema,
176176
table: _table,
177177
filter: realtimeFilter,
178178
callback: (payload) {
179-
final newRecord = payload.newRecord;
180-
_streamData.add(newRecord);
181-
_addStream();
182-
})
183-
.onPostgresChanges(
184-
event: PostgresChangeEvent.update,
185-
schema: _schema,
186-
table: _table,
187-
filter: realtimeFilter,
188-
callback: (payload) {
189-
final updatedIndex = _streamData.indexWhere(
190-
(element) => _isTargetRecord(record: element, payload: payload),
191-
);
192-
193-
final updatedRecord = payload.newRecord;
194-
if (updatedIndex >= 0) {
195-
_streamData[updatedIndex] = updatedRecord;
196-
} else {
197-
_streamData.add(updatedRecord);
198-
}
199-
_addStream();
200-
})
201-
.onPostgresChanges(
202-
event: PostgresChangeEvent.delete,
203-
schema: _schema,
204-
table: _table,
205-
filter: realtimeFilter,
206-
callback: (payload) {
207-
final deletedIndex = _streamData.indexWhere(
208-
(element) => _isTargetRecord(record: element, payload: payload),
209-
);
210-
if (deletedIndex >= 0) {
211-
/// Delete the data from in memory cache if it was found
212-
_streamData.removeAt(deletedIndex);
213-
_addStream();
179+
switch (payload.eventType) {
180+
case PostgresChangeEvent.insert:
181+
final newRecord = payload.newRecord;
182+
_streamData.add(newRecord);
183+
_addStream();
184+
break;
185+
case PostgresChangeEvent.update:
186+
final updatedIndex = _streamData.indexWhere(
187+
(element) =>
188+
_isTargetRecord(record: element, payload: payload),
189+
);
190+
191+
final updatedRecord = payload.newRecord;
192+
if (updatedIndex >= 0) {
193+
_streamData[updatedIndex] = updatedRecord;
194+
} else {
195+
_streamData.add(updatedRecord);
196+
}
197+
_addStream();
198+
break;
199+
case PostgresChangeEvent.delete:
200+
final deletedIndex = _streamData.indexWhere(
201+
(element) =>
202+
_isTargetRecord(record: element, payload: payload),
203+
);
204+
if (deletedIndex >= 0) {
205+
/// Delete the data from in memory cache if it was found
206+
_streamData.removeAt(deletedIndex);
207+
_addStream();
208+
}
209+
break;
210+
default:
211+
break;
214212
}
215213
})
216214
.subscribe((status, [error]) {

0 commit comments

Comments
 (0)