Skip to content

Commit 4e35115

Browse files
authored
fix(realtime_client): Consolidate realtime subscription for stream (#1096)
* fix: Consolidate realtime subscription for stream * fix: adjust the mock data
1 parent ccfcbf5 commit 4e35115

File tree

2 files changed

+39
-55
lines changed

2 files changed

+39
-55
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]) {

packages/supabase/test/mock_test.dart

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -136,25 +136,11 @@ void main() {
136136
'postgres_changes': [
137137
{
138138
'id': 77086988,
139-
'event': 'INSERT',
139+
'event': '*',
140140
'schema': 'public',
141141
'table': 'todos',
142142
if (realtimeFilter != null) 'filter': realtimeFilter,
143143
},
144-
{
145-
'id': 25993878,
146-
'event': 'UPDATE',
147-
'schema': 'public',
148-
'table': 'todos',
149-
if (realtimeFilter != null) 'filter': realtimeFilter,
150-
},
151-
{
152-
'id': 48673474,
153-
'event': 'DELETE',
154-
'schema': 'public',
155-
'table': 'todos',
156-
if (realtimeFilter != null) 'filter': realtimeFilter,
157-
}
158144
]
159145
},
160146
'status': 'ok'
@@ -208,7 +194,7 @@ void main() {
208194
'ref': null,
209195
'event': 'postgres_changes',
210196
'payload': {
211-
'ids': [25993878],
197+
'ids': [77086988],
212198
'data': {
213199
'columns': [
214200
{'name': 'id', 'type': 'int4', 'type_modifier': 4294967295},
@@ -257,7 +243,7 @@ void main() {
257243
'type': 'DELETE',
258244
if (realtimeFilter != null) 'filter': realtimeFilter,
259245
},
260-
'ids': [48673474]
246+
'ids': [77086988]
261247
},
262248
});
263249
webSocket!.add(deleteString);
@@ -271,7 +257,7 @@ void main() {
271257
'ref': null,
272258
'event': 'postgres_changes',
273259
'payload': {
274-
'ids': [25993878],
260+
'ids': [77086988],
275261
'data': {
276262
'columns': [
277263
{'name': 'id', 'type': 'int4', 'type_modifier': 4294967295},
@@ -321,7 +307,7 @@ void main() {
321307
'type': 'DELETE',
322308
if (realtimeFilter != null) 'filter': realtimeFilter,
323309
},
324-
'ids': [48673474]
310+
'ids': [77086988]
325311
},
326312
});
327313
webSocket!.add(ignoredDeleteString);

0 commit comments

Comments
 (0)