Skip to content

Commit

Permalink
♻️ Move cancelable operation into the core
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexV525 committed Jun 20, 2024
1 parent d619dd7 commit 4b756d0
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 25 deletions.
11 changes: 1 addition & 10 deletions dio/lib/src/adapters/io_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import 'dart:async';
import 'dart:io';
import 'dart:typed_data';

import 'package:async/async.dart';

import '../adapter.dart';
import '../dio_exception.dart';
import '../options.dart';
Expand Down Expand Up @@ -70,14 +68,7 @@ class IOHttpClientAdapter implements HttpClientAdapter {
"Can't establish connection after the adapter was closed.",
);
}
final operation = CancelableOperation.fromFuture(
_fetch(options, requestStream, cancelFuture),
);
final wr = WeakReference<CancelableOperation<ResponseBody>>(operation);
cancelFuture?.whenComplete(() {
wr.target?.cancel();
});
return operation.value;
return _fetch(options, requestStream, cancelFuture);
}

Future<ResponseBody> _fetch(
Expand Down
16 changes: 12 additions & 4 deletions dio/lib/src/dio_mixin.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'dart:convert';
import 'dart:math' as math;
import 'dart:typed_data';

import 'package:async/async.dart';
import 'package:meta/meta.dart';

import 'adapter.dart';
Expand Down Expand Up @@ -524,11 +525,18 @@ abstract class DioMixin implements Dio {
final cancelToken = reqOpt.cancelToken;
try {
final stream = await _transformData(reqOpt);
final responseBody = await httpClientAdapter.fetch(
reqOpt,
stream,
cancelToken?.whenCancel,
final operation = CancelableOperation.fromFuture(
httpClientAdapter.fetch(
reqOpt,
stream,
cancelToken?.whenCancel,
),
);
final operationWeakReference = WeakReference(operation);
cancelToken?.whenCancel.whenComplete(() {
operationWeakReference.target?.cancel();
});
final responseBody = await operation.value;
final headers = Headers.fromMap(
responseBody.headers,
preserveHeaderCase: reqOpt.preserveHeaderCase,
Expand Down
2 changes: 1 addition & 1 deletion dio/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ environment:
sdk: '>=2.18.0 <4.0.0'

dependencies:
async: ^2.11.0
async: ^2.8.2
http_parser: ^4.0.0
meta: ^1.5.0
path: ^1.8.0
Expand Down
10 changes: 1 addition & 9 deletions plugins/http2_adapter/lib/src/http2_adapter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';

import 'package:async/async.dart';
import 'package:dio/dio.dart';
import 'package:dio/io.dart';
import 'package:http2/http2.dart';
Expand Down Expand Up @@ -49,14 +48,7 @@ class Http2Adapter implements HttpClientAdapter {
) {
// Recursive fetching.
final redirects = <RedirectRecord>[];
final operation = CancelableOperation.fromFuture(
_fetch(options, requestStream, cancelFuture, redirects),
);
final wr = WeakReference<CancelableOperation<ResponseBody>>(operation);
cancelFuture?.whenComplete(() {
wr.target?.cancel();
});
return operation.value;
return _fetch(options, requestStream, cancelFuture, redirects);
}

Future<ResponseBody> _fetch(
Expand Down
1 change: 0 additions & 1 deletion plugins/http2_adapter/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@ environment:
sdk: ">=3.0.0 <4.0.0"

dependencies:
async: ^2.11.0
dio: ^5.2.0
http2: ^2.1.0
meta: ^1.9.1
Expand Down

0 comments on commit 4b756d0

Please sign in to comment.