Skip to content

Commit 7b65e4f

Browse files
javiermrzjavier.marzan1CodingAleCR
authored
feat: adds timeout callback function
Co-authored-by: javier.marzan1 <[email protected]> Co-authored-by: Alejandro Ulate <[email protected]>
1 parent 7b347e0 commit 7b65e4f

File tree

5 files changed

+24
-2
lines changed

5 files changed

+24
-2
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 2.0.0-beta.5
4+
5+
-&nbsp;&nbsp;Added: Support for `onRequestTimeout` when setting up `requestTimeout` on the interceptor.
6+
37
## 2.0.0-beta.4
48

59
- ❗️🛠&nbsp;&nbsp;Changed: `shouldAttemptRetryOnException` will now also pass the `BaseRequest`.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ http_interceptor: ^1.0.1
5656
- 🖋 Supports self-signed certificates (except on Flutter Web).
5757
- 🍦 Compatible with vanilla Dart projects or Flutter projects.
5858
- 🎉 Null-safety.
59+
- ⏲ Timeout configuration with duration and timeout functions.
5960

6061
## Usage
6162

lib/http/intercepted_client.dart

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import 'package:http_interceptor/models/models.dart';
99
import 'http_methods.dart';
1010
import '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;

lib/http/intercepted_http.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ class InterceptedHttp {
4141
/// Maximum duration of a request.
4242
final Duration? requestTimeout;
4343

44+
/// Request timeout handler
45+
TimeoutCallback? onRequestTimeout;
46+
4447
/// A policy that defines whether a request or response should trigger a
4548
/// retry. This is useful for implementing JWT token expiration
4649
final RetryPolicy? retryPolicy;
@@ -54,6 +57,7 @@ class InterceptedHttp {
5457
InterceptedHttp._internal({
5558
required this.interceptors,
5659
this.requestTimeout,
60+
this.onRequestTimeout,
5761
this.retryPolicy,
5862
this.client,
5963
});
@@ -79,12 +83,14 @@ class InterceptedHttp {
7983
factory InterceptedHttp.build({
8084
required List<InterceptorContract> interceptors,
8185
Duration? requestTimeout,
86+
TimeoutCallback? onRequestTimeout,
8287
RetryPolicy? retryPolicy,
8388
Client? client,
8489
}) =>
8590
InterceptedHttp._internal(
8691
interceptors: interceptors,
8792
requestTimeout: requestTimeout,
93+
onRequestTimeout: onRequestTimeout,
8894
retryPolicy: retryPolicy,
8995
client: client,
9096
);
@@ -222,6 +228,7 @@ class InterceptedHttp {
222228
final client = InterceptedClient.build(
223229
interceptors: interceptors,
224230
requestTimeout: requestTimeout,
231+
onRequestTimeout: onRequestTimeout,
225232
retryPolicy: retryPolicy,
226233
client: this.client,
227234
);

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: http_interceptor
22
description: A lightweight, simple plugin that allows you to intercept request and response objects and modify them if desired.
3-
version: 2.0.0-beta.4
3+
version: 2.0.0-beta.5
44
homepage: https://github.com/CodingAleCR/http_interceptor
55
issue_tracker: https://github.com/CodingAleCR/http_interceptor/issues
66
repository: https://github.com/CodingAleCR/http_interceptor

0 commit comments

Comments
 (0)