From ccaec61de2aedeb176189e424dd7594c667c83c3 Mon Sep 17 00:00:00 2001 From: bvandeusen Date: Sun, 1 Mar 2026 14:38:01 -0500 Subject: [PATCH] Fix setup screen always rejecting valid servers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dio throws DioException for 4xx responses by default, so a server returning 401 on /api/auth/status (correct behaviour for an unauthenticated request) was caught and shown as "Could not reach server", preventing the URL from ever being saved. Set validateStatus: (_) => true so any HTTP response (200, 401, 404…) counts as "reachable". Only actual network failures (no response) now trigger the error message. Co-Authored-By: Claude Sonnet 4.6 --- lib/screens/setup/setup_screen.dart | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/screens/setup/setup_screen.dart b/lib/screens/setup/setup_screen.dart index 9634a58..2d20490 100644 --- a/lib/screens/setup/setup_screen.dart +++ b/lib/screens/setup/setup_screen.dart @@ -36,16 +36,20 @@ class _SetupScreenState extends ConsumerState { if (url.endsWith('/')) url = url.substring(0, url.length - 1); try { - final dio = Dio(BaseOptions(connectTimeout: const Duration(seconds: 5))); + final dio = Dio(BaseOptions( + connectTimeout: const Duration(seconds: 5), + // 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'); - // 401 is fine — server is reachable } on DioException catch (_) { setState(() { _testing = false; _error = 'Could not reach server. Check the URL and try again.'; }); return; - } catch (e) { + } catch (_) { setState(() { _testing = false; _error = 'Could not reach server. Check the URL and try again.';