[flutter] Dio를 사용하여 비동기 요청을 취소하는 방법을 알려주세요.
-
CancelToken 이용 Dio에서는 CancelToken을 사용하여 요청을 취소할 수 있습니다. CancelToken은 CancelToken 클래스의 cancel 메서드를 호출하여 요청을 취소할 수 있는 객체입니다.
import 'package:dio/dio.dart'; CancelToken cancelToken = CancelToken(); void cancelRequest() { cancelToken.cancel("요청이 취소됨"); } Dio dio = Dio(); Response response; try { response = await dio.get('https://example.com/api', cancelToken: cancelToken); } catch (e) { if (CancelToken.isCancel(e)) { print('요청이 취소되었습니다: $e'); } }
-
Interceptor를 이용한 요청 취소 Dio의 Interceptor를 이용하여 요청을 취소할 수도 있습니다. Interceptor를 사용하면 모든 요청과 응답을 가로챌 수 있습니다.
Dio dio = Dio(); List<CancelToken> cancelTokens = []; dio.interceptors.add(InterceptorsWrapper( onRequest: (RequestOptions options) { CancelToken cancelToken = CancelToken(); cancelTokens.add(cancelToken); options.cancelToken = cancelToken; return options; }, onResponse: (Response response) { cancelTokens.remove(response.requestOptions.cancelToken); return response; }, onError: (DioError e) { if (CancelToken.isCancel(e)) { print('요청이 취소되었습니다: $e'); } return e; } )); // 요청 취소 예제 for (CancelToken token in cancelTokens) { token.cancel("요청이 취소됨"); }
이 같은 방법들을 통해 Dio를 사용하여 비동기 요청을 취소할 수 있습니다.