diff --git a/lib/extensions/uri.dart b/lib/extensions/uri.dart index f0613f4..86460f6 100644 --- a/lib/extensions/uri.dart +++ b/lib/extensions/uri.dart @@ -19,6 +19,13 @@ extension AddParameters on Uri { newParameters[key] = value; }); - return buildUrlString(paramUrl, newParameters).toUri(); + String finalUrl = buildUrlString(paramUrl, newParameters); + + // Preserve the fragment if it exists + if (fragment.isNotEmpty) { + finalUrl += '#$fragment'; + } + + return finalUrl.toUri(); } } diff --git a/lib/http/intercepted_client.dart b/lib/http/intercepted_client.dart index 5afac3a..0a9deac 100644 --- a/lib/http/intercepted_client.dart +++ b/lib/http/intercepted_client.dart @@ -293,7 +293,7 @@ class InterceptedClient extends BaseClient { _retryCount += 1; await Future.delayed(retryPolicy! .delayRetryAttemptOnResponse(retryAttempt: _retryCount)); - return _attemptRequest(request); + return _attemptRequest(request, isStream: isStream); } } on Exception catch (error) { if (retryPolicy != null && @@ -302,7 +302,7 @@ class InterceptedClient extends BaseClient { _retryCount += 1; await Future.delayed(retryPolicy! .delayRetryAttemptOnException(retryAttempt: _retryCount)); - return _attemptRequest(request); + return _attemptRequest(request, isStream: isStream); } else { rethrow; } diff --git a/lib/models/retry_policy.dart b/lib/models/retry_policy.dart index 4a2a498..2535d35 100644 --- a/lib/models/retry_policy.dart +++ b/lib/models/retry_policy.dart @@ -45,7 +45,7 @@ abstract class RetryPolicy { FutureOr shouldAttemptRetryOnResponse(BaseResponse response) => false; /// Number of maximum request attempts that can be retried. - final int maxRetryAttempts = 1; + int get maxRetryAttempts => 1; Duration delayRetryAttemptOnException({required int retryAttempt}) => Duration.zero; diff --git a/test/models/retry_policy_test.dart b/test/models/retry_policy_test.dart index 9e6b49f..65e0d2e 100644 --- a/test/models/retry_policy_test.dart +++ b/test/models/retry_policy_test.dart @@ -12,6 +12,14 @@ main() { test("defaults to 1", () { expect(testObject.maxRetryAttempts, 1); }); + + test("can be overridden", () { + testObject = TestRetryPolicy( + maxRetryAttempts: 5, + ); + + expect(testObject.maxRetryAttempts, 5); + }); }); group("delayRetryAttemptOnException", () { @@ -60,4 +68,13 @@ main() { }); } -class TestRetryPolicy extends RetryPolicy {} +class TestRetryPolicy extends RetryPolicy { + TestRetryPolicy({ + int maxRetryAttempts = 1, + }) : internalMaxRetryAttempts = maxRetryAttempts; + + final int internalMaxRetryAttempts; + + @override + int get maxRetryAttempts => internalMaxRetryAttempts; +}