flutter-isar
Original:🇺🇸 English
Translated
Isar Database, Caching & Offline-First Patterns
3installs
Sourcedhruvanbhalara/skills
Added on
NPX Install
npx skill4agent add dhruvanbhalara/skills flutter-isarTags
Translated version includes tags in frontmatterSKILL.md Content
View Translation Comparison →Isar Database
- Use Isar as the primary local database for structured data persistence
- Define collections using annotation with
@collectionfieldId - Place collection definitions in the directory of the relevant feature
data/local/ - Run after modifying collections
dart run build_runner build --delete-conflicting-outputs
Schema Design
- Keep collections focused — one collection per domain entity
- Use annotations for fields queried frequently
@Index - Use for enum fields
@enumerated - Use and
Linksfor relationships between collectionsBacklinks - NEVER store derived/computed values — compute them in the domain layer
Migrations
- Isar handles additive schema changes automatically (new fields, new collections)
- For breaking changes (renamed fields, removed fields), write migration logic in the repository
- Version your database schema and check version on app startup
Repository Pattern for Local Data
- Local DataSource wraps all Isar ,
put,get,deletecallswatch - Repositories orchestrate between remote and local DataSources
- Repositories decide cache-first vs network-first strategy per use case
Offline-First Patterns
- Cache-First: Read from Isar first, fetch from network in background, update Isar on success
- Network-First: Fetch from network, fall back to Isar on failure
- Write-Behind: Write to Isar immediately, sync to server asynchronously (queue pending changes)
- Always show cached data immediately while refreshing in background
Reactive Queries
- Use Isar's or
watchLazy()to stream changes to the UI via BLoCwatch() - Wrap Isar watch streams in the repository and expose as
Stream<List<DomainModel>> - Dispose stream subscriptions properly in BLoC method
close()
Secure Storage
- Use for sensitive key-value data (tokens, encryption keys)
flutter_secure_storage - Use ONLY for non-sensitive user preferences (theme, locale, onboarding flags)
SharedPreferences - NEVER store passwords, tokens, or secrets in or plain Isar
SharedPreferences