What problem does it solve? Opening and evolving a SQLite database in a Flutter app involves versioned migrations, per-connection pragmas, single-instance semantics, and platform differences that cause subtle bugs like "database is locked" errors or lost schema changes. This Skill provides the correct patterns for opening, configuring, migrating, closing, and deleting databases with package:sqflite. ## Core Features & Use Cases - Versioned migrations: Use openDatabase with version, onCreate, onUpgrade, onDowngrade, and onDatabaseDowngradeDelete, with batch-based migration chains that upgrade any old version to the newest schema. - Connection configuration: Apply PRAGMA foreign_keys, WAL journal mode, and Android locale settings in onConfigure so they are re-applied at every open. - Instance and file lifecycle: Share one Database instance across the app, copy bundled asset databases, delete databases safely with deleteDatabase, and open read-only or in-memory databases. - Use Case: You ship a Flutter app with a pre-populated catalog.db asset. Copy it to the databases path on first launch with databaseFactory.writeDatabaseBytes, then open it read-only so no migration callbacks run. ## Quick Start Ask the AI to write the code that opens a versioned sqflite database with foreign keys enabled and a migration chain for your Flutter app.