diff --git a/lib/screens/setup/setup_screen.dart b/lib/screens/setup/setup_screen.dart index 2d20490..1e66ff6 100644 --- a/lib/screens/setup/setup_screen.dart +++ b/lib/screens/setup/setup_screen.dart @@ -37,22 +37,32 @@ class _SetupScreenState extends ConsumerState { try { final dio = Dio(BaseOptions( - connectTimeout: const Duration(seconds: 5), + connectTimeout: const Duration(seconds: 10), // Accept any HTTP status — only network-level failures throw. // A 401 or 200 both mean the server is reachable. validateStatus: (_) => true, )); await dio.get('$url/api/auth/status'); - } on DioException catch (_) { + } on DioException catch (e) { + final msg = switch (e.type) { + DioExceptionType.badCertificate => + 'SSL certificate error. If using a self-signed cert, it must be trusted on this device.', + DioExceptionType.connectionTimeout || + DioExceptionType.receiveTimeout => + 'Connection timed out. The server may be down or unreachable.', + DioExceptionType.connectionError => + 'Cannot connect: ${e.message ?? "network error"}', + _ => 'Error: ${e.message ?? e.type.name}', + }; setState(() { _testing = false; - _error = 'Could not reach server. Check the URL and try again.'; + _error = msg; }); return; - } catch (_) { + } catch (e) { setState(() { _testing = false; - _error = 'Could not reach server. Check the URL and try again.'; + _error = 'Unexpected error: $e'; }); return; }