@@ -9,6 +9,8 @@ import 'package:http_interceptor/models/models.dart';
99import 'http_methods.dart' ;
1010import 'interceptor_contract.dart' ;
1111
12+ typedef TimeoutCallback = FutureOr <StreamedResponse > Function ();
13+
1214/// Class to be used by the user to set up a new `http.Client` with interceptor
1315/// support.
1416///
@@ -44,6 +46,9 @@ class InterceptedClient extends BaseClient {
4446 /// Maximum duration of a request.
4547 final Duration ? requestTimeout;
4648
49+ /// Request timeout handler
50+ TimeoutCallback ? onRequestTimeout;
51+
4752 /// A policy that defines whether a request or response should trigger a
4853 /// retry. This is useful for implementing JWT token expiration
4954 final RetryPolicy ? retryPolicy;
@@ -54,6 +59,7 @@ class InterceptedClient extends BaseClient {
5459 InterceptedClient ._internal ({
5560 required this .interceptors,
5661 this .requestTimeout,
62+ this .onRequestTimeout,
5763 this .retryPolicy,
5864 Client ? client,
5965 }) : _inner = client ?? Client ();
@@ -78,12 +84,14 @@ class InterceptedClient extends BaseClient {
7884 factory InterceptedClient .build ({
7985 required List <InterceptorContract > interceptors,
8086 Duration ? requestTimeout,
87+ TimeoutCallback ? onRequestTimeout,
8188 RetryPolicy ? retryPolicy,
8289 Client ? client,
8390 }) =>
8491 InterceptedClient ._internal (
8592 interceptors: interceptors,
8693 requestTimeout: requestTimeout,
94+ onRequestTimeout: onRequestTimeout,
8795 retryPolicy: retryPolicy,
8896 client: client,
8997 );
@@ -264,7 +272,9 @@ class InterceptedClient extends BaseClient {
264272
265273 var stream = requestTimeout == null
266274 ? await _inner.send (interceptedRequest)
267- : await _inner.send (interceptedRequest).timeout (requestTimeout! );
275+ : await _inner
276+ .send (interceptedRequest)
277+ .timeout (requestTimeout! , onTimeout: onRequestTimeout);
268278
269279 response =
270280 request is Request ? await Response .fromStream (stream) : stream;
0 commit comments