NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Adapter-based Dart networking with shared retry, HTTP caching (ETag, stale-while-revalidate), and logging interceptors for Dio, http, and Retrofit.
Last release 8 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Nearly every release is documented
notes for 3 of 3 stable releases
Nothing withdrawn
no release was ever pulled
2 months old
3 releases · first in 2026
One column per month.
This release fixes several bugs that affected real applications and adds request cancellation. Most apps need no code changes; see "Behavior changes"
This release fixes several bugs that affected real applications and adds
request cancellation. Most apps need no code changes; see "Behavior changes"
below. Note that ^0.0.2 does not allow 0.0.3; update your constraint to
^0.0.3.
request<Map<String, dynamic>> (and any T otherdynamic) threw a TypeError on every adapter, after sending extraApiResponse<T>; data ofSerializationException with a clear message.HttpAdapter: HTTP error statuses reach onError. Non-2xx responsesDioAdapter/RetrofitAdapter: ETag revalidation works. A 304 Not Modified was thrown as a ServerException instead of serving the cachedwithConnectTimeout, withReceiveTimeout,withSendTimeout were stored but ignored. HttpAdapter also ignoredApiRequest.enableStaleWhileRevalidate wasRetryMetrics.successfulRetries.Dio per attempt that was neverHttpAdapter URLs. Absolute URLs in ApiRequest.path are supported,queryParameters instead ofHttpAdapter bodies. JSON bodies are sent as application/json; theytext/plain unless a Content-Type was given. Mapapplication/x-www-form-urlencoded are sent as form fields. ASerializationException, and is noNetworkException.HttpAdapter responses respect the response charset and no longer failmaskedKeys now masks body fields (at any depth,LoggerConfig.maskedKeys also mask proxy-authorization,cookie, set-cookie, x-api-key, api_key, access_token,refresh_token, and client_secret.0:00:00.123000ms, andrequestFilter did not apply to errors.RetryConfig.calculateDelay overflowed to 0 for large attempt numbers,ApiRequest.hashCode differed for equal requests with headers.CacheInterceptor threw on very large max-age values, cached no-cache304, andCacheConfig.keyBuilder now receives the query string, so requests thatDioAdapter omits null query parameters, like HttpAdapter.MemoryCacheStore threw for maxEntries <= 0.CacheKeyGenerator.generate threw for query values that are notApiCancelToken and ApiRequest.cancelToken.CancellationException, which is never retried.RetrofitAdapter, Dio'sCancelToken now also interrupts api_plus retry delays.HttpAdapter and DioAdapter accept connectTimeout, receiveTimeout,sendTimeout.HttpAdapter timeouts: connect, send, and receive timeoutsMemoryCacheStore.evictionCount, and CacheMetrics.evictions now countsMemoryCacheStore LRU evictions.onResponse interceptors now see error responses on every adapter (theyHttpAdapter).http ^1.6.0 already required it, so the>=3.1.0 constraint could not be satisfied on older SDKs.ApiException errors thrown by interceptors are propagated unchanged.NetworkException and retried.HttpAdapter returns non-JSON content types (e.g. text/plain) asString instead of attempting to JSON-decode them, matching Dio.RetryConfig.onRetry is called before the delay, as documented.ServerException messages are the same on every adapter:Server returned <status>: <reason>.develop.mocktail, fake_async).Fix log truncation for long console messages by chunking output
dio, http)lints, test, mocktail, fake_async)Retry System : Configurable retry with exponential, linear, and fixed backoff strategies, random jitter, Retry-After header support, custom retry stra
ApiAdapter, ApiInterceptor, CacheStore, RetryStrategy, ConnectivityChecker, LogPrinterYour coding agent can read these notes before it upgrades. Set up the MCP server →