@@ -86,20 +86,23 @@ class ResponseBody {
86
86
this .headers,
87
87
this .statusMessage,
88
88
this .redirects,
89
- }) : stream = Stream .fromIterable (utf8.encode (text).map ((e) => Uint8List .fromList ([e])).toList ());
89
+ }) : stream = Stream .fromIterable (
90
+ utf8.encode (text).map ((e) => Uint8List .fromList ([e])).toList ());
90
91
91
92
ResponseBody .fromBytes (
92
93
List <int > bytes,
93
94
this .statusCode, {
94
95
this .headers,
95
96
this .statusMessage,
96
97
this .redirects,
97
- }) : stream = Stream .fromIterable (bytes.map ((e) => Uint8List .fromList ([e])).toList ());
98
+ }) : stream = Stream .fromIterable (
99
+ bytes.map ((e) => Uint8List .fromList ([e])).toList ());
98
100
}
99
101
100
102
/// The default HttpClientAdapter for Dio is [DefaultHttpClientAdapter] .
101
103
class DefaultHttpClientAdapter extends HttpClientAdapter {
102
104
Uint8List E ;
105
+
103
106
Future <ResponseBody > fetch (
104
107
RequestOptions options,
105
108
Stream <List <int >> requestStream,
@@ -115,8 +118,9 @@ class DefaultHttpClientAdapter extends HttpClientAdapter {
115
118
//_httpClient.connectionTimeout= Duration(milliseconds: options.connectTimeout);
116
119
// _httpClient.connectionTimeout =
117
120
// Duration(milliseconds: options.connectTimeout);
118
- requestFuture = _httpClient.openUrl (options.method, options.uri)
119
- .timeout (Duration (milliseconds: options.connectTimeout));
121
+ requestFuture = _httpClient
122
+ .openUrl (options.method, options.uri)
123
+ .timeout (Duration (milliseconds: options.connectTimeout));
120
124
} else {
121
125
_httpClient.connectionTimeout = null ;
122
126
requestFuture = _httpClient.openUrl (options.method, options.uri);
@@ -146,8 +150,7 @@ class DefaultHttpClientAdapter extends HttpClientAdapter {
146
150
if (options.receiveTimeout > 0 ) {
147
151
future = future.timeout (Duration (milliseconds: options.receiveTimeout));
148
152
}
149
- HttpClientResponse responseStream;
150
-
153
+ dynamic responseStream;
151
154
try {
152
155
responseStream = await future;
153
156
} on TimeoutException {
@@ -157,8 +160,22 @@ class DefaultHttpClientAdapter extends HttpClientAdapter {
157
160
type: DioErrorType .RECEIVE_TIMEOUT ,
158
161
);
159
162
}
163
+
164
+ Stream <Uint8List > stream;
165
+
166
+ // https://github.com/dart-lang/co19/issues/383
167
+ if (responseStream is Stream <Uint8List >) {
168
+ stream = responseStream;
169
+ } else {
170
+ stream = responseStream.transform (
171
+ StreamTransformer <List <int >, Uint8List >.fromHandlers (
172
+ handleData: (data, sink) {
173
+ sink.add (data);
174
+ }));
175
+ }
176
+
160
177
return ResponseBody (
161
- responseStream ,
178
+ stream ,
162
179
responseStream.statusCode,
163
180
headers: responseStream.headers,
164
181
redirects: responseStream.redirects,
0 commit comments