request method
Future<void>
request({
- required HttpMethod method,
- required String url,
- dynamic data,
- Map<
String, dynamic> ? queryParameters, - Options? options,
- Map<
String, String> ? headers, - CancelToken? cancelToken,
- void onSendProgress()?,
- void onReceiveProgress()?,
- required void onCatchDioException(
- DioException
- required void onCatchException(
- dynamic
- required FutureOr<
void> onSuccess(- Response
- String? handleErrorMessageKey,
Implementation
Future<void> request({
required HttpMethod method,
required String url,
dynamic data,
Map<String, dynamic>? queryParameters,
Options? options,
Map<String, String>? headers,
CancelToken? cancelToken,
void Function(int, int)? onSendProgress,
void Function(int, int)? onReceiveProgress,
required void Function(DioException) onCatchDioException,
required void Function(dynamic) onCatchException,
required FutureOr<void> Function(dio.Response) onSuccess,
String? handleErrorMessageKey,
}) async {
dio.Response response;
final defaultOptions = (options ?? Options()).copyWith(headers: headers);
try {
// Perform the request based on the specified HTTP method.
switch (method) {
// Perform a GET request using Dio with provided parameters.
case HttpMethod.get:
response = await _dio.get(
url,
data: data,
options: defaultOptions,
queryParameters: queryParameters,
cancelToken: cancelToken,
onReceiveProgress: onReceiveProgress,
);
break;
case HttpMethod.post:
// Perform a POST request using Dio with provided parameters.
response = await _dio.post(
url,
data: data,
queryParameters: queryParameters,
options: defaultOptions,
onSendProgress: onSendProgress,
cancelToken: cancelToken,
onReceiveProgress: onReceiveProgress,
);
break;
case HttpMethod.patch:
// Perform a PATCH request using Dio with provided parameters.
response = await _dio.patch(
url,
data: data,
queryParameters: queryParameters,
options: defaultOptions,
cancelToken: cancelToken,
onSendProgress: onSendProgress,
onReceiveProgress: onReceiveProgress,
);
break;
case HttpMethod.put:
// Perform a PUT request using Dio with provided parameters.
response = await _dio.put(
url,
data: data,
queryParameters: queryParameters,
options: defaultOptions,
cancelToken: cancelToken,
onSendProgress: onSendProgress,
onReceiveProgress: onReceiveProgress,
);
break;
case HttpMethod.delete:
// Perform a DELETE request using Dio with provided parameters.
response = await _dio.delete(
url,
data: data,
options: defaultOptions,
queryParameters: queryParameters,
cancelToken: cancelToken,
);
break;
default:
throw Exception('Unknown method');
}
await onSuccess(response);
} on DioException catch (e) {
onCatchDioException(e);
// Call monitoring API when trouble in network
_networkMonitoringFunction?.call(
NetworkMonitoringParams(
stackTrace: e.stackTrace,
statusCode: e.response?.statusCode,
requestUrl: e.requestOptions.uri.toString(),
apiErrorMessage:
'${e.response?.statusMessage != null ? '${e.response?.statusMessage} / ' : ''}${handleErrorMessage(e, key: handleErrorMessageKey)}',
errorMessage: e.toString(),
runTimeErrorType: e,
dioExceptionType: e.type.name,
dioMessage: e.message,
dioUnderlyingError: e.error?.toString(),
),
);
} catch (e, stackTrace) {
// Invoke exception monitoring first and in isolation so a throwing
// onCatchException / network monitor cannot skip runtime error reporting.
try {
_exceptionMonitoringFunctions?.call(
ExceptionMonitoringParams(
exception: e,
stackTrace: stackTrace,
requestUrl: url,
errorMessage: e.toString(),
),
);
} catch (_) {
// Monitoring failures must not suppress request error handling.
}
onCatchException(e);
try {
// Call monitoring API when trouble in network
_networkMonitoringFunction?.call(
NetworkMonitoringParams(
stackTrace: stackTrace,
requestUrl: url,
apiErrorMessage: handleErrorMessage(e, key: handleErrorMessageKey),
errorMessage: e.toString(),
runTimeErrorType: e,
),
);
} catch (_) {
// Monitoring failures must not suppress request error handling.
}
}
}