diff --git a/lib/features/messaging/presentation/screens/chat_screen.dart b/lib/features/messaging/presentation/screens/chat_screen.dart index a9dc610..fab19f5 100644 --- a/lib/features/messaging/presentation/screens/chat_screen.dart +++ b/lib/features/messaging/presentation/screens/chat_screen.dart @@ -101,8 +101,18 @@ class _ChatScreenState extends ConsumerState @override void didChangeAppLifecycleState(AppLifecycleState state) { - if (state == AppLifecycleState.resumed) { - // App came back to foreground — reconnect socket and refresh messages + if (state == AppLifecycleState.paused || state == AppLifecycleState.inactive) { + // App went to background/recent apps — clear active conversation so + // incoming messages DON'T auto-mark as read while user isn't looking. + // Also clear push suppression so notifications still show. + ref.read(messagingProvider.notifier).setActiveConversation(null); + PushNotificationService().activeConversationId = null; + } else if (state == AppLifecycleState.resumed) { + // App came back to foreground — restore active conversation, reconnect + // socket, mark unread messages as read, and refresh. + ref.read(messagingProvider.notifier).setActiveConversation(widget.conversationId); + PushNotificationService().activeConversationId = widget.conversationId; + _socket.ensureConnected().then((_) { if (_socket.isConnected && mounted) { _socket.joinConversation(widget.conversationId); @@ -110,6 +120,8 @@ class _ChatScreenState extends ConsumerState }); // Refresh messages to catch anything missed while in background ref.read(messagingProvider.notifier).loadMessages(widget.conversationId); + // Now that user is actively viewing, mark as read + ref.read(messagingProvider.notifier).markAsRead(widget.conversationId); } }