flutter-persistence · git:20260822.e519e06 · 2026-08-22 · sha256 cb6f5a4e89b64815
flutter-persistence git:20260822.e519e06A
Immutable. This exact content is served forever at /api/v1/blob/cb6f5a4e89b64815.
--- name: flutter-persistence description: Design or review Flutter local persistence, caching, offline behavior, schema evolution, and secure-data boundaries. Use for preferences, files, SQLite, or an existing database package; route remote transport to flutter-networking. --- # Flutter Persistence Choose storage from data shape, query needs, durability, sensitivity, synchronization, and migration requirements. ## Select proportionately - Use preferences only for small settings, not relational or critical domain data. - Use files for document/blob ownership with explicit atomicity and cleanup. - Use a database when queries, relationships, transactions, indexing, or migration justify it. - Use platform secure storage for small secrets; do not treat ordinary app databases as secret vaults. - Preserve an established package unless it cannot satisfy a concrete requirement. ## Model ownership Define the source of truth, cache freshness, write ordering, conflict behavior, offline mutations, deletion semantics, and recovery from corrupt or incompatible data. Keep storage models behind repositories so schema details do not leak into widgets. ## Migration and safety Version schemas and test upgrades from realistic prior versions. Never destroy user data as an automatic response to a migration failure unless the product explicitly permits it. Avoid storing access tokens, passwords, or sensitive personal data in logs or plain preferences. ## Verification Test first run, reopen, upgrade, failed write, concurrent access, corrupted data, deletion, and offline/online transitions relevant to the feature. Use temporary databases or directories for deterministic tests. ## Sources - [Flutter persistence cookbook](https://docs.flutter.dev/cookbook/persistence)