@@ -2,6 +2,7 @@ import 'dart:io';
2
2
import 'dio.dart' ;
3
3
import 'cancel_token.dart' ;
4
4
import 'transformer.dart' ;
5
+ import 'adapter.dart' ;
5
6
6
7
/// ResponseType indicates which transformation should
7
8
/// be automatically applied to the response data by Dio.
@@ -28,6 +29,7 @@ enum ResponseType {
28
29
}
29
30
30
31
typedef ValidateStatus = bool Function (int status);
32
+ typedef ResponseDecoder = String Function (List <int > responseBytes, RequestOptions options, ResponseBody responseBody);
31
33
32
34
/// The common config for the Dio instance.
33
35
/// `dio.options` is a instance of [BaseOptions]
@@ -47,6 +49,7 @@ class BaseOptions extends _RequestConfig {
47
49
bool receiveDataWhenStatusError = true ,
48
50
bool followRedirects = true ,
49
51
int maxRedirects = 5 ,
52
+ ResponseDecoder responseDecoder,
50
53
}) : super (
51
54
method: method,
52
55
connectTimeout: connectTimeout,
@@ -60,6 +63,7 @@ class BaseOptions extends _RequestConfig {
60
63
followRedirects: followRedirects,
61
64
cookies: cookies,
62
65
maxRedirects: maxRedirects,
66
+ responseDecoder: responseDecoder,
63
67
);
64
68
65
69
/// Create a new Option from current instance with merging attributes.
@@ -79,6 +83,7 @@ class BaseOptions extends _RequestConfig {
79
83
bool receiveDataWhenStatusError,
80
84
bool followRedirects,
81
85
int maxRedirects,
86
+ ResponseDecoder responseDecoder,
82
87
}) {
83
88
return new BaseOptions (
84
89
method: method ?? this .method,
@@ -95,6 +100,7 @@ class BaseOptions extends _RequestConfig {
95
100
receiveDataWhenStatusError ?? this .receiveDataWhenStatusError,
96
101
followRedirects: followRedirects ?? this .followRedirects,
97
102
maxRedirects: maxRedirects ?? this .maxRedirects,
103
+ responseDecoder: responseDecoder ?? this .responseDecoder,
98
104
);
99
105
}
100
106
@@ -121,6 +127,7 @@ class Options extends _RequestConfig {
121
127
bool receiveDataWhenStatusError,
122
128
bool followRedirects,
123
129
int maxRedirects,
130
+ ResponseDecoder responseDecoder,
124
131
}) : super (
125
132
method: method,
126
133
connectTimeout: connectTimeout,
@@ -135,6 +142,7 @@ class Options extends _RequestConfig {
135
142
followRedirects: followRedirects,
136
143
cookies: cookies,
137
144
maxRedirects: maxRedirects,
145
+ responseDecoder: responseDecoder,
138
146
);
139
147
140
148
/// Create a new Option from current instance with merging attributes.
@@ -152,6 +160,7 @@ class Options extends _RequestConfig {
152
160
bool receiveDataWhenStatusError,
153
161
bool followRedirects,
154
162
int maxRedirects,
163
+ ResponseDecoder responseDecoder,
155
164
}) {
156
165
return new Options (
157
166
method: method ?? this .method,
@@ -167,6 +176,7 @@ class Options extends _RequestConfig {
167
176
receiveDataWhenStatusError ?? this .receiveDataWhenStatusError,
168
177
followRedirects: followRedirects ?? this .followRedirects,
169
178
maxRedirects: maxRedirects ?? this .maxRedirects,
179
+ responseDecoder: responseDecoder ?? this .responseDecoder,
170
180
);
171
181
}
172
182
}
@@ -192,6 +202,7 @@ class RequestOptions extends Options {
192
202
bool receiveDataWhenStatusError = true ,
193
203
bool followRedirects = true ,
194
204
int maxRedirects,
205
+ ResponseDecoder responseDecoder,
195
206
}) : super (
196
207
method: method,
197
208
connectTimeout: connectTimeout,
@@ -206,6 +217,7 @@ class RequestOptions extends Options {
206
217
receiveDataWhenStatusError: receiveDataWhenStatusError,
207
218
followRedirects: followRedirects,
208
219
maxRedirects: maxRedirects,
220
+ responseDecoder: responseDecoder,
209
221
);
210
222
211
223
/// generate uri
@@ -260,6 +272,7 @@ class _RequestConfig {
260
272
this .receiveDataWhenStatusError = true ,
261
273
this .followRedirects = true ,
262
274
this .maxRedirects = 5 ,
275
+ this .responseDecoder,
263
276
}) : this .headers = headers ?? {},
264
277
this .extra = extra ?? {};
265
278
@@ -328,4 +341,8 @@ class _RequestConfig {
328
341
329
342
/// Custom Cookies for every request
330
343
List <Cookie > cookies;
344
+
345
+ /// The default response decoder is utf8decoder, you can set custom
346
+ /// decoder by this option, it will be used in [Transformer] .
347
+ ResponseDecoder responseDecoder;
331
348
}
0 commit comments