@@ -48,20 +48,21 @@ class RetryClient extends BaseClient {
48
48
/// the client has a chance to perform side effects like logging. The
49
49
/// `response` parameter will be null if the request was retried due to an
50
50
/// error for which [whenError] returned `true` .
51
- RetryClient (this ._inner,
52
- {int retries,
53
- bool when (BaseResponse response),
54
- bool whenError (error, StackTrace stackTrace),
55
- Duration delay (int retryCount),
56
- void onRetry (BaseRequest request, BaseResponse response, int retryCount)})
57
- : _retries = retries ?? 3 ,
51
+ RetryClient (
52
+ this ._inner, {
53
+ int retries,
54
+ bool Function (BaseResponse ) when ,
55
+ bool Function (Object , StackTrace ) whenError,
56
+ Duration Function (int retryCount) delay,
57
+ void Function (BaseRequest , BaseResponse , int retryCount) onRetry,
58
+ }) : _retries = retries ?? 3 ,
58
59
_when = when ?? ((response) => response.statusCode == 503 ),
59
60
_whenError = whenError ?? ((_, __) => false ),
60
61
_delay = delay ??
61
62
((retryCount) =>
62
- Duration (milliseconds: 500 ) * math.pow (1.5 , retryCount)),
63
+ const Duration (milliseconds: 500 ) * math.pow (1.5 , retryCount)),
63
64
_onRetry = onRetry {
64
- RangeError .checkNotNegative (_retries, " retries" );
65
+ RangeError .checkNotNegative (_retries, ' retries' );
65
66
}
66
67
67
68
/// Like [new RetryClient] , but with a pre-computed list of [delays]
@@ -70,27 +71,38 @@ class RetryClient extends BaseClient {
70
71
/// This will retry a request at most `delays.length` times, using each delay
71
72
/// in order. It will wait for `delays[0]` after the initial request,
72
73
/// `delays[1]` after the first retry, and so on.
73
- RetryClient .withDelays (Client inner, Iterable <Duration > delays,
74
- {bool when (BaseResponse response),
75
- bool whenError (error, StackTrace stackTrace),
76
- void onRetry (BaseRequest request, BaseResponse response, int retryCount)})
77
- : this ._withDelays (inner, delays.toList (),
78
- when : when , whenError: whenError, onRetry: onRetry);
79
-
80
- RetryClient ._withDelays (Client inner, List <Duration > delays,
81
- {bool when (BaseResponse response),
82
- bool whenError (error, StackTrace stackTrace),
83
- void onRetry (BaseRequest request, BaseResponse response, int retryCount)})
84
- : this (inner,
85
- retries: delays.length,
86
- delay: (retryCount) => delays[retryCount],
87
- when : when ,
88
- whenError: whenError,
89
- onRetry: onRetry);
74
+ RetryClient .withDelays (
75
+ Client inner,
76
+ Iterable <Duration > delays, {
77
+ bool Function (BaseResponse ) when ,
78
+ bool Function (Object , StackTrace ) whenError,
79
+ void Function (BaseRequest , BaseResponse , int retryCount) onRetry,
80
+ }) : this ._withDelays (
81
+ inner,
82
+ delays.toList (),
83
+ when : when ,
84
+ whenError: whenError,
85
+ onRetry: onRetry,
86
+ );
87
+
88
+ RetryClient ._withDelays (
89
+ Client inner,
90
+ List <Duration > delays, {
91
+ bool Function (BaseResponse ) when ,
92
+ bool Function (Object , StackTrace ) whenError,
93
+ void Function (BaseRequest , BaseResponse , int ) onRetry,
94
+ }) : this (
95
+ inner,
96
+ retries: delays.length,
97
+ delay: (retryCount) => delays[retryCount],
98
+ when : when ,
99
+ whenError: whenError,
100
+ onRetry: onRetry,
101
+ );
90
102
91
103
@override
92
104
Future <StreamedResponse > send (BaseRequest request) async {
93
- var splitter = StreamSplitter (request.finalize ());
105
+ final splitter = StreamSplitter (request.finalize ());
94
106
95
107
var i = 0 ;
96
108
for (;;) {
@@ -117,12 +129,12 @@ class RetryClient extends BaseClient {
117
129
118
130
/// Returns a copy of [original] with the given [body] .
119
131
StreamedRequest _copyRequest (BaseRequest original, Stream <List <int >> body) {
120
- var request = StreamedRequest (original.method, original.url);
121
- request. contentLength = original.contentLength;
122
- request. followRedirects = original.followRedirects;
123
- request. headers.addAll (original.headers);
124
- request. maxRedirects = original.maxRedirects;
125
- request .persistentConnection = original.persistentConnection;
132
+ final request = StreamedRequest (original.method, original.url)
133
+ .. contentLength = original.contentLength
134
+ .. followRedirects = original.followRedirects
135
+ .. headers.addAll (original.headers)
136
+ .. maxRedirects = original.maxRedirects
137
+ . .persistentConnection = original.persistentConnection;
126
138
127
139
body.listen (request.sink.add,
128
140
onError: request.sink.addError,
0 commit comments