Line data Source code
1 : import 'package:tech_proof/core/error/error_mapper.dart'; 2 : import 'package:tech_proof/core/error/global_error_bus.dart'; 3 : import 'package:tech_proof/core/error/logger_service.dart'; 4 : import 'package:dio/dio.dart'; 5 : 6 : class FailureInterceptor extends Interceptor { 7 1 : @override 8 : void onError(DioException err, ErrorInterceptorHandler handler) { 9 2 : final statusCode = err.response?.statusCode; 10 : final message = 11 4 : err.response?.data.toString() ?? err.message ?? "Unknown Dio error"; 12 : 13 2 : LoggerService.error("Dio", message, err.stackTrace); 14 : 15 1 : if (statusCode == 401) { 16 2 : GlobalErrorBus.dispatch(AppError("unauthorized", "Session expired")); 17 1 : } else if (statusCode == 500) { 18 1 : GlobalErrorBus.dispatch( 19 1 : AppError("server_error", "Internal Server Error"), 20 : ); 21 1 : } else if (statusCode == 404) { 22 2 : GlobalErrorBus.dispatch(AppError("server_error", "Resource Not Found")); 23 2 : } else if (err.type == DioExceptionType.connectionTimeout) { 24 2 : GlobalErrorBus.dispatch(AppError("network", "Connection Timeout")); 25 : } 26 1 : final failure = mapDioException(err); 27 : 28 1 : final newError = DioException( 29 1 : requestOptions: err.requestOptions, 30 1 : response: err.response, 31 1 : type: err.type, 32 : error: failure, 33 1 : message: err.message, 34 : ); 35 1 : handler.next(newError); 36 : } 37 : }