From c8c455bb5795701a51cfde42623a36dc9c7f08cd Mon Sep 17 00:00:00 2001
From: LittleSheep <littlesheep.code@hotmail.com>
Date: Sun, 23 Feb 2025 12:03:17 +0800
Subject: [PATCH] :bug: Make sure the send read event triggered before dispose
 chat message controller

---
 lib/controllers/chat_message_controller.dart | 29 ++++++++++++--------
 1 file changed, 18 insertions(+), 11 deletions(-)

diff --git a/lib/controllers/chat_message_controller.dart b/lib/controllers/chat_message_controller.dart
index d95a908..5e1fb5e 100644
--- a/lib/controllers/chat_message_controller.dart
+++ b/lib/controllers/chat_message_controller.dart
@@ -514,23 +514,30 @@ class ChatMessageController extends ChangeNotifier {
     }
 
     _readEventDebounce = Timer(const Duration(milliseconds: 500), () {
-      _ws.conn?.sink.add(jsonEncode(
-        WebSocketPackage(
-          method: 'events.read',
-          endpoint: 'im',
-          payload: {
-            'channel_member_id': profile!.id,
-            'event_id': _readEventAnchor,
-          },
-        ).toJson(),
-      ));
-      log('[Messaging] Send read event request: $_readEventAnchor');
+      _sendReadEvent();
     });
   }
 
+  void _sendReadEvent() {
+    _ws.conn?.sink.add(jsonEncode(
+      WebSocketPackage(
+        method: 'events.read',
+        endpoint: 'im',
+        payload: {
+          'channel_member_id': profile!.id,
+          'event_id': _readEventAnchor,
+        },
+      ).toJson(),
+    ));
+    log('[Messaging] Send read event request: $_readEventAnchor');
+  }
+
   @override
   void dispose() {
     _wsSubscription?.cancel();
+    if (_readEventDebounce?.isActive ?? false) {
+      _sendReadEvent();
+    }
     _readEventDebounce?.cancel();
     super.dispose();
   }