From bb0346a843753814df1ba0b97ae555169b8f4dbe Mon Sep 17 00:00:00 2001 From: ramadhan sjamsani Date: Thu, 9 Apr 2026 23:09:36 +0800 Subject: [PATCH] Fix overlay: Directionality widget + startListening state guard - Wrap overlay Stack with Directionality (required above MaterialApp) - Guard startListening() for IncomingData/StaleData states to prevent overlay dismissal when status reloads on app resume Co-Authored-By: Claude Opus 4.6 (1M context) --- mitra_app/lib/core/chat/chat_request_notifier.dart | 10 +++++++++- .../lib/core/chat/widgets/chat_request_overlay.dart | 9 ++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/mitra_app/lib/core/chat/chat_request_notifier.dart b/mitra_app/lib/core/chat/chat_request_notifier.dart index 8947ab9..f7c730b 100644 --- a/mitra_app/lib/core/chat/chat_request_notifier.dart +++ b/mitra_app/lib/core/chat/chat_request_notifier.dart @@ -76,7 +76,15 @@ class ChatRequest extends _$ChatRequest { ChatRequestData build() => const ChatRequestIdleData(); Future startListening() async { - if (state is ChatRequestAcceptingData || state is ChatRequestAcceptedData) return; + // Don't reset state if showing a request, stale message, or actively accepting + if (state is ChatRequestIncomingData || + state is ChatRequestStaleData || + state is ChatRequestAcceptingData || + state is ChatRequestAcceptedData) { + // Still reconnect WebSocket if needed, but don't change state + if (_channel == null) await _connectWebSocket(); + return; + } _closeWebSocket(); state = const ChatRequestListeningData(); await _connectWebSocket(); diff --git a/mitra_app/lib/core/chat/widgets/chat_request_overlay.dart b/mitra_app/lib/core/chat/widgets/chat_request_overlay.dart index 014a40c..c1607de 100644 --- a/mitra_app/lib/core/chat/widgets/chat_request_overlay.dart +++ b/mitra_app/lib/core/chat/widgets/chat_request_overlay.dart @@ -79,9 +79,11 @@ class _ChatRequestOverlayState extends ConsumerState } }); - return Stack( - children: [ - widget.child, + return Directionality( + textDirection: TextDirection.ltr, + child: Stack( + children: [ + widget.child, if (_visible) ...[ // Semi-transparent dim Positioned.fill( @@ -108,6 +110,7 @@ class _ChatRequestOverlayState extends ConsumerState ), ], ], + ), ); }