Line data Source code
1 : import 'dart:async'; 2 : import 'dio_error.dart'; 3 : 4 : /// You can cancel a request by using a cancel token. 5 : /// One token can be shared with different requests. 6 : /// when a token's [cancel] method invoked, all requests 7 : /// with this token will be cancelled. 8 : class CancelToken { 9 2 : CancelToken() { 10 4 : _completer = Completer(); 11 : } 12 : 13 : /// Whether is throw by [cancel] 14 1 : static bool isCancel(DioError e) { 15 2 : return e.type == DioErrorType.CANCEL; 16 : } 17 : 18 : /// If request have been canceled, save the cancel Error. 19 : DioError _cancelError; 20 : 21 : /// If request have been canceled, save the cancel Error. 22 4 : DioError get cancelError => _cancelError; 23 : 24 : Completer _completer; 25 : 26 : /// whether cancelled 27 0 : bool get isCancelled => _cancelError != null; 28 : 29 : /// When cancelled, this future will be resolved. 30 6 : Future<void> get whenCancel => _completer.future; 31 : 32 : /// Cancel the request 33 2 : void cancel([dynamic reason]) { 34 4 : _cancelError = DioError(type: DioErrorType.CANCEL, error: reason); 35 4 : _completer.complete(); 36 : } 37 : }