Skip to content

Commit e940a21

Browse files
committed
### Fixed
* Fixed #29 update messages list after delete message ### Dependencies * Upgraded `supabase_flutter` to `^2.9.1` * Upgraded `meta` to `^1.16.0`
1 parent 3ee1870 commit e940a21

File tree

3 files changed

+42
-14
lines changed

3 files changed

+42
-14
lines changed

example/lib/src/pages/room.dart

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,29 @@ class _RoomPageState extends State<RoomPage> {
223223
enabled: true,
224224
onTextChanged: (text) => _chatController.onTyping(),
225225
),
226+
onMessageLongPress: (context, p1) async {
227+
final confirm = await showDialog<bool>(
228+
context: context,
229+
builder: (context) => AlertDialog(
230+
title: Text('Confirmation of deletion'),
231+
content: Text('Do you really want to delete this message?'),
232+
actions: [
233+
TextButton(
234+
onPressed: () => Navigator.of(context).pop(false),
235+
child: Text('Cancel'),
236+
),
237+
TextButton(
238+
onPressed: () => Navigator.of(context).pop(true),
239+
child: Text('Delete'),
240+
),
241+
],
242+
),
243+
);
244+
if (confirm == true) {
245+
await _chatController.deleteMessage(widget.room.id, p1.id);
246+
}
247+
},
248+
226249
),
227250
),
228251
),

lib/src/class/supabase_chat_controller.dart

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,14 +77,7 @@ class SupabaseChatController {
7777

7878
void _onData(
7979
List<Map<String, dynamic>> newData,
80-
List<Map<String, dynamic>> oldData,
8180
) {
82-
final deletedMessagesId = oldData
83-
.map(
84-
(e) => e['id'].toString(),
85-
)
86-
.toList();
87-
_messages.removeWhere((element) => deletedMessagesId.contains(element.id));
8881
for (var val in newData) {
8982
final author = _room.users.firstWhere(
9083
(u) => u.id == val['authorId'],
@@ -112,7 +105,7 @@ class SupabaseChatController {
112105
/// then it will be necessary to call the [loadPreviousMessages] method to get
113106
/// the next page of messages
114107
Stream<List<types.Message>> get messages {
115-
_messagesQuery().then((value) => _onData(value, []));
108+
_messagesQuery().then((value) => _onData(value));
116109
_client
117110
.channel('${_config.schema}:${_config.messagesTableName}:${_room.id}')
118111
.onPostgresChanges(
@@ -124,8 +117,7 @@ class SupabaseChatController {
124117
column: 'roomId',
125118
value: _room.id,
126119
),
127-
callback: (payload) =>
128-
_onData([payload.newRecord], [payload.oldRecord]),
120+
callback: (payload) => _onData([payload.newRecord]),
129121
)
130122
.subscribe();
131123
return _messagesController.stream;
@@ -135,7 +127,7 @@ class SupabaseChatController {
135127
/// page
136128
Future<void> loadPreviousMessages() async {
137129
_currentPage += 1;
138-
await _messagesQuery().then((value) => _onData(value, []));
130+
await _messagesQuery().then((value) => _onData(value));
139131
}
140132

141133
/// Returns a stream of typing users from Supabase for a specified room.
@@ -168,6 +160,17 @@ class SupabaseChatController {
168160
'typing': typing,
169161
};
170162

163+
/// Removes message.
164+
Future<bool> deleteMessage(String roomId, String messageId) async {
165+
final result =
166+
await SupabaseChatCore.instance.deleteMessage(roomId, messageId);
167+
if (result) {
168+
_messages.removeWhere((e) => messageId == e.id);
169+
_messagesController.sink.add(_messages);
170+
}
171+
return result;
172+
}
173+
171174
void dispose() {
172175
_typingChannel.untrack();
173176
}

lib/src/class/supabase_chat_core.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -282,13 +282,15 @@ class SupabaseChatCore {
282282
}
283283

284284
/// Removes message.
285-
Future<void> deleteMessage(String roomId, String messageId) async {
286-
await client
285+
Future<bool> deleteMessage(String roomId, String messageId) async {
286+
final result = await client
287287
.schema(config.schema)
288288
.from(config.messagesTableName)
289289
.delete()
290290
.eq('roomId', roomId)
291-
.eq('id', messageId);
291+
.eq('id', messageId)
292+
.select();
293+
return result.isNotEmpty;
292294
}
293295

294296
/// Removes room.

0 commit comments

Comments
 (0)