From 516197b819278b22cdc373d1e453197e3d2be8c4 Mon Sep 17 00:00:00 2001 From: JulianAlcala Date: Sun, 26 Apr 2026 05:11:48 +0200 Subject: [PATCH] fix(splash): distinguish network errors from auth errors in session check --- .../splash/lib/src/domain/check_session_use_case_impl.dart | 7 ++++++- .../src/data/datasource/user_remote_datasource_impl.dart | 6 +----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/modules/splash/lib/src/domain/check_session_use_case_impl.dart b/modules/splash/lib/src/domain/check_session_use_case_impl.dart index 2191439d..fb831f5d 100644 --- a/modules/splash/lib/src/domain/check_session_use_case_impl.dart +++ b/modules/splash/lib/src/domain/check_session_use_case_impl.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:sf_infrastructure/sf_infrastructure.dart'; import 'package:sf_shared/sf_shared.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -28,6 +29,10 @@ class CheckSessionUseCaseImpl implements CheckSessionUseCase { try { await _userRepository.getUserInfo(); } catch (e) { + if (e is ApiException && e.isNetworkError) { + debugPrint('[CheckSession] network error, assuming valid session: $e'); + return InitialRoute.home; + } debugPrint('[CheckSession] no session: $e'); return InitialRoute.login; } @@ -40,7 +45,7 @@ class CheckSessionUseCaseImpl implements CheckSessionUseCase { } } catch (e) { debugPrint('[CheckSession] devices check failed: $e'); - return InitialRoute.deviceSetup; + return InitialRoute.home; } debugPrint('[CheckSession] → home'); diff --git a/packages/sf_shared/lib/src/data/datasource/user_remote_datasource_impl.dart b/packages/sf_shared/lib/src/data/datasource/user_remote_datasource_impl.dart index 4ba4057e..ec1440ca 100644 --- a/packages/sf_shared/lib/src/data/datasource/user_remote_datasource_impl.dart +++ b/packages/sf_shared/lib/src/data/datasource/user_remote_datasource_impl.dart @@ -25,11 +25,7 @@ class UserRemoteDatasourceImpl implements UserRemoteDatasource { final parsed = UserResponseModel.fromJson(data); return parsed.item; } on DioException catch (error) { - final apiMsg = error.response?.data; - final msg = apiMsg is String - ? apiMsg - : (error.message ?? 'Error in /auth/me'); - throw Exception(msg); + throw mapDioError(error, defaultMessage: 'Error in /auth/me'); } }