[flutter] Dio를 사용하여 비동기 요청을 취소하는 방법을 알려주세요.
  1. 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');
        }
    }
    
  2. 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를 사용하여 비동기 요청을 취소할 수 있습니다.