all_image_cache 1.0.0
all_image_cache: ^1.0.0 copied to clipboard
Flutter image cache with memory/disk layers, network/file/bytes sources, SVG support, optional compression, stale fallback, and production-ready widgets.
1.0.0 - 2026-07-28 #
Added #
- Added a conservative, injectable
StaleFallbackPolicyand a redactedImageNetworkExceptionfor transport failures. - Added idempotent manager/config disposal and safe sequential reinitialization.
- Added versioned physical blob namespaces per
all_boxcontainer. - Added staged blob writes with flushed temporary files, recovery backups, rollback after metadata failure, durable transaction markers, and startup invalidation of blob/metadata generations interrupted before commit.
- Added explicit metadata schema versioning and self-healing malformed records.
- Added deterministic state-machine fuzz coverage (seed
12345, 5,000 operations), 100-identity authenticated isolation stress,all_boxpersistence failure tests, clear-barrier tests, and multi-container regressions. - Added
doc/cache_semantics.mdas the formal cache contract. - Added the explicit 1.x public API stability and exception contract.
- Added
ImageCacheManager.l2Stats()to make the reported cache layer unambiguous. - Added CI gates for the minimum supported Flutter with downgraded dependencies and for the current stable Flutter release.
Changed #
- Required metadata commits now await
all_box 1.0.0writeAndSave; LRU touch updates remain debounced and report asynchronous failures through cache events. - The default stale policy no longer returns expired private bytes after 401/403 and no longer masks compression/storage/programming errors.
AllImageCache.init()now validates container names by default and disposes the previous manager before reinitialization.- Moved provider-token and conditional decode-eviction operations to an internal extension excluded from the public barrel, and marked singleton overrides as testing-only.
- Deprecated ambiguous
ImageCacheManager.stats()in favor ofl2Stats(); the alias remains available throughout 1.x. - Lowered the package floor to Dart 3.3.0 / Flutter 3.19.0 and widened direct dependency compatibility to the oldest APIs exercised by the package. The example development tooling declares its separate Dart 3.10.0 / Flutter 3.38.0 requirement.
- Tightened the test-only
platformlower bound to 3.1.0 so minimum-dependency validation cannot select the incompatible 3.0.0 release.
0.0.9 #
Added #
- Added deterministic raster, provider, widget, SVG, multi-generation, and multi-source stress regressions for stale decode failures.
Fixed #
- Prevented an older raster or SVG decode failure from evicting newer bytes
written by
putSourceBytesorrefresh. - Kept current corrupted content recoverable through content-aware conditional eviction, so a later request still refetches without an automatic retry loop.
0.0.8 #
Added #
- Added
ImageCacheManager.putSourceBytes, an authoritative source-based API for placing uploaded or otherwise already-available image bytes into cache without exposing internal cache-key generation. - Added deterministic regressions for authoritative writes, decode recovery, byte ownership, storage consistency, network error safety, web compilation, and cleanup performance.
Changed #
- Made
putBytesauthoritative: it now invalidates older generations, in-flight deduplication state, negative-cache entries, andCachedImageProvideridentity tokens before storing. - Cache bytes are copied once on successful insertion and returned through unmodifiable views, avoiding multi-megabyte copies on cache hits while preventing callers from mutating cached content.
- File storage now maps logical keys to SHA-256
.blobfilenames. Public cache keys are unchanged, but disk entries written by older versions are treated as cold misses and fetched again. - Count-only cleanup avoids sorting the full cache when no eviction is needed or only a small number of entries must be removed.
- The legacy
ValidationKeyGeneratorkeeps the same FNV-1a output using web-safeBigIntarithmetic.
Fixed #
- Prevented older fetches from overwriting a newer
putBytesupdate. - Invalidated L1/L2 bytes after actual raster or SVG decode failures so a later rebuild can fetch valid content without an automatic retry loop.
- Rolled back newly written bytes when metadata persistence fails and removed entries whose stored byte length disagrees with metadata.
- Prevented arbitrary logical keys from escaping the configured blob directory or creating nested paths.
- Preserved externally thrown
TimeoutExceptionvalues when no network timeout is configured. - Removed sensitive paths and query strings from invalid-URL exceptions.
- Restored and validated the example web target with dart2js and the Wasm dry run.
0.0.7 #
Breaking changes #
NetworkImageSourceis no longerconstbecause request headers are now copied into an immutable snapshot at construction. RemoveconstfromNetworkImageSource(...)calls. Code that attempted to mutatesource.headersmust instead create a new source.- Native HTTP errors now expose only the URL origin in exception messages and
in the attached
Uri. Consumers that inspected the full request path or query from these errors must use their own request context instead.
Changed #
- Coordinated
CachedImageProviderTTL and invalidation with Flutter's decodedImageCachethrough bounded, deterministic provider identity tokens. - Added generation-safe
evictSourceandrefresh; old in-flight work can no longer repopulate or overwrite newer cache state. - Added optional L1 byte limits, network timeout, and maximum download size.
- Added deterministic concurrency stress and hardening regressions.
- Migrated the example status flow to
all_observerwith its official lint preset and lifecycle-safe reactive controller.
0.0.6 #
- Replaced the collision-prone default UUID key algorithm with a local, versioned SHA-256 generator and isolated potentially contaminated legacy cache entries.
- Started raster fades on the first decoded frame and SVG fades after successful parsing, while preserving the placeholder during decode.
- Added source-aware visual keys plus configurable fade-out duration and curve.
- Included
manageridentity inCachedImageProviderequality and hash code. - Documented animated
imageBuildercompositions andImageProvideranimation limitations.
0.0.5 #
- Relaxed
all_boxconstraint to accept versions>=0.6.0 <2.0.0.
0.0.4 #
- Updated
all_boxto^0.6.0.
0.0.3 #
- Added optional positive-cache TTL per request, default TTL, and TTL resolver.
- Documented TTL usage for images that can change while keeping the same URL.
- Fixed README image and language links for pub.dev rendering.
0.0.2 #
- Updated dependency constraints.
0.0.1 #
- TODO: Describe initial release.