dispose method
Release the resources this backend itself constructed (database connections, HTTP clients). Idempotent — safe to call twice. Every method except dispose throws StateError afterwards.
Ownership rule: a backend disposes ONLY what it created. Decorators
(EncryptedBackend, ChunkedBackend) never dispose the backend
they wrap — whoever constructed the inner backend disposes it.
Cellar.close() follows the same rule: it disposes the backends it
built, and leaves Cellar.withBackends-provided ones to the caller.
Implementation
@override
Future<void> dispose() async {
// Ownership rule: inner and decryptCache are caller-provided, so
// their creators dispose them — this layer only arms its own guard.
markDisposed();
_cacheFills.clear();
}