execute<T extends BaseResponseModel, K> method

  1. @override
Future<Result<K, NetworkError>> execute<T extends BaseResponseModel, K>(
  1. T responseModel
)
override

Implementation

@override
Future<Result<K, NetworkError>> execute<T extends BaseResponseModel, K>(
    T responseModel) async {
  if (await NetworkConnectivity.status) {
    try {
      final response = await _dio!.fetch(RequestOptions(
        baseUrl: _baseURL ?? '',
        path: _path ?? '',
        data: _body,
        contentType: _contentType,
        headers: _header,
        method: _method,
        connectTimeout: _connectTimeout,
        receiveTimeout: _receiveTimeOut ?? 3000,
        sendTimeout: _sendTimeout ?? 3000,
        queryParameters: _queryParameters,
        validateStatus: (statusCode) => (statusCode! >= HttpStatus.ok &&
            statusCode <= HttpStatus.multipleChoices),
      ));
      var decodeResponse = NetworkDecoding.decode<T, K>(
          response: response, responseType: responseModel);

      return Result.success(decodeResponse);
    } on DioError catch (diorError) {
      if (debugMode == true) {
        // ignore: avoid_print
        print(" => ${NetworkError.request(error: diorError)}");
      }
      return Result.failure(NetworkError.request(error: diorError));

      // TYPE ERROR
    } on TypeError catch (e) {
      if (debugMode == true) {
        // ignore: avoid_print
        print("=> ${NetworkError.type(error: e.toString())}");
      }
      if (_interceptor != null) {
        _dio?.interceptors.add(_interceptor!);
      }
      return Result.failure(NetworkError.type(error: e.toString()));
    }
  } else {
    if (debugMode == true) {
      // ignore: avoid_print
      print(
          const NetworkError.connectivity(message: 'No Internet Connection'));
    }
    return const Result.failure(
        NetworkError.connectivity(message: 'No Internet Connection'));
  }
}