feat: Improve offline detection logic
This commit refactors the connectivity service to be more robust and less prone to UI flicker. Key changes: - Any successful API response now briefly suppresses the offline warning. This prevents the UI from flashing an offline message between regular connectivity checks. - The threshold for showing the offline warning is increased from 2 to 3 consecutive failed health checks. - The timeout for health checks is increased to better handle slow networks. - The offline warning is now suppressed if there are active data streams to avoid interrupting the user. - A custom JSON converter is added for conversation metadata to handle potential type mismatches from local storage.
This commit is contained in:
@@ -6,6 +6,7 @@ import 'package:go_router/go_router.dart';
|
||||
import '../providers/app_providers.dart';
|
||||
import '../services/connectivity_service.dart';
|
||||
import '../services/navigation_service.dart';
|
||||
import '../services/persistent_streaming_service.dart';
|
||||
import '../utils/debug_logger.dart';
|
||||
import '../../features/auth/providers/unified_auth_providers.dart';
|
||||
import '../../features/auth/views/authentication_page.dart';
|
||||
@@ -103,12 +104,16 @@ class RouterNotifier extends ChangeNotifier {
|
||||
// 1. Not in reviewer mode
|
||||
// 2. Connectivity is explicitly offline
|
||||
// 3. Auth is authenticated (don't interrupt auth flow)
|
||||
// 4. App is in foreground and offline warning isn't suppressed
|
||||
// 5. No active streaming is in progress (avoid interrupting token streams)
|
||||
final hasActiveStreams = PersistentStreamingService().activeStreamCount > 0;
|
||||
final shouldShowConnectionIssue =
|
||||
!reviewerMode &&
|
||||
connectivity == ConnectivityStatus.offline &&
|
||||
authState == AuthNavigationState.authenticated &&
|
||||
connectivityService.isAppForeground &&
|
||||
!connectivityService.isOfflineSuppressed;
|
||||
!connectivityService.isOfflineSuppressed &&
|
||||
!hasActiveStreams;
|
||||
|
||||
if (shouldShowConnectionIssue) {
|
||||
return location == Routes.connectionIssue ? null : Routes.connectionIssue;
|
||||
|
||||
Reference in New Issue
Block a user