Validate stale chat requests, show info instead of auto-dismiss

- Add validateIncomingRequest() — checks session status with backend
- Home screen validates before showing sheet (on resume + listener)
- IncomingRequestSheet shows "cancelled/accepted by other" message
  instead of silently dismissing when request becomes stale

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-09 16:40:52 +08:00
parent 212e1e8ac6
commit e3da863f3c
3 changed files with 73 additions and 2 deletions

View File

@@ -32,7 +32,13 @@ class _HomeScreenState extends ConsumerState<HomeScreen> with WidgetsBindingObse
if (state == AppLifecycleState.resumed) {
final chatState = ref.read(chatRequestProvider);
if (chatState is ChatRequestIncomingData) {
_showIncomingRequest(chatState.sessionId);
// Validate the request is still pending before showing
ref.read(chatRequestProvider.notifier).validateIncomingRequest().then((_) {
final current = ref.read(chatRequestProvider);
if (current is ChatRequestIncomingData) {
_showIncomingRequest(current.sessionId);
}
});
}
}
}
@@ -65,7 +71,13 @@ class _HomeScreenState extends ConsumerState<HomeScreen> with WidgetsBindingObse
// Listen for incoming chat requests
ref.listen(chatRequestProvider, (prev, next) {
if (next is ChatRequestIncomingData) {
_showIncomingRequest(next.sessionId);
// Validate request is still pending before showing sheet
ref.read(chatRequestProvider.notifier).validateIncomingRequest().then((_) {
final current = ref.read(chatRequestProvider);
if (current is ChatRequestIncomingData) {
_showIncomingRequest(current.sessionId);
}
});
} else if (next is ChatRequestAcceptedData) {
final session = next.session;
final sessionId = session['session_id'] as String? ?? session['id'] as String;