handleDioError method

Future<RepositoryException> handleDioError(
  1. DioException error,
  2. StackTrace stackTrace,
  3. dynamic params
)

Implementation

Future<RepositoryException> handleDioError(
  DioException error,
  StackTrace stackTrace,
  dynamic params,
) async {
  final response = error.response;
  final request = error.requestOptions.data;

  Sentry.captureException(
    error,
    stackTrace: stackTrace,
    withScope: (scope) {
      scope.setContexts(
        'request_params',
        params.toString(),
      );

      if (request != null) {
        scope.setContexts(
          'response_request_params',
          request.toString(),
        );
        // scope.setExtra(
        //     'response_request_headers', request.headers.toString());
      }
      if (response != null) {
        scope.setExtra('response_data', response.data.toString());
        scope.setExtra('response_status', response.statusCode.toString());
        scope.setExtra('response_headers', response.headers.map.toString());
      }
    },
  );
  if (response != null) {
    switch (response.statusCode) {
      case 500:
        return RepositoryException(
          RepositoryErrorType.serverError,
          RepositoryErrorType.serverError.message,
        );
      case 400:
        return RepositoryException(
          RepositoryErrorType.badRequest,
          RepositoryErrorType.badRequest.message,
        );
      case 401:
        return RepositoryException(
          RepositoryErrorType.unAothorized,
          RepositoryErrorType.unAothorized.message,
        );

      // 他のステータスコードに対しても同様に処理
      default:
        return RepositoryException(
          RepositoryErrorType.unknown,
          RepositoryErrorType.unknown.message,
        );
    }
  } else {
    return RepositoryException(
      RepositoryErrorType.networkError,
      RepositoryErrorType.networkError.message,
    );
  }
}