onError method
- DioException err,
- ErrorInterceptorHandler handler
override
Called when an exception was occurred during the request.
Implementation
@override
Future<void> onError(
DioException err,
ErrorInterceptorHandler handler,
) async {
// リトライ回数を取得
final retryCount = err.requestOptions.extra['retryCount'] ?? 0;
// 401エラーかつリトライ回数が最大リトライ回数未満の場合
if (err.response?.statusCode == 401 && retryCount < _maxRetryCount) {
// トークン再取得
if (err.requestOptions.extra['requireToken'] == true) {
final token = await _authService.getAccessToken();
err.requestOptions.headers[HttpHeaders.authorizationHeader] =
'Bearer $token';
}
// リトライ回数をカウントアップ
err.requestOptions.extra['retryCount'] = retryCount + 1;
final options = _convertOptionsFromRequestOptions(err.requestOptions);
// リクエスト再送信
final response = await _dio.request(
err.requestOptions.path,
data: err.requestOptions.data,
options: options,
queryParameters: err.requestOptions.queryParameters,
cancelToken: err.requestOptions.cancelToken,
onSendProgress: err.requestOptions.onSendProgress,
onReceiveProgress: err.requestOptions.onReceiveProgress,
);
return handler.resolve(response);
}
return handler.next(err);
}