openDatabase function
- String path, {
- int? version,
- OnDatabaseConfigureFn? onConfigure,
- OnDatabaseCreateFn? onCreate,
- OnDatabaseVersionChangeFn? onUpgrade,
- OnDatabaseVersionChangeFn? onDowngrade,
- OnDatabaseOpenFn? onOpen,
- String? password,
- bool readOnly = false,
- bool singleInstance = true,
Open the database at a given path
version (optional) specifies the schema version of the database being
opened. This is used to decide whether to call onCreate, onUpgrade,
and onDowngrade
The optional callbacks are called in the following order:
onConfigureonCreateoronUpgradeoronDowngradeonOpen
onConfigure is the first callback invoked when opening the database. It
allows you to perform database initialization such as enabling foreign keys
or write-ahead logging
If version is specified, onCreate, onUpgrade, and onDowngrade can
be called. These functions are mutually exclusive — only one of them can be
called depending on the context, although they can all be specified to
cover multiple scenarios
onCreate is called if the database did not exist prior to calling
openDatabase. You can use the opportunity to create the required tables
in the database according to your schema
onUpgrade is called if either of the following conditions are met:
onCreateis not specified- The database already exists and
versionis higher than the last database version
In the first case where onCreate is not specified, onUpgrade is called
with its oldVersion parameter as 0. In the second case, you can perform
the necessary migration procedures to handle the differing schema
onDowngrade is called only when version is lower than the last database
version. This is a rare case and should only come up if a newer version of
your code has created a database that is then interacted with by an older
version of your code. You should try to avoid this scenario
onOpen is the last optional callback to be invoked. It is called after
the database version has been set and before openDatabase returns
When readOnly (false by default) is true, all other parameters are
ignored and the database is opened as-is
When singleInstance is true (the default), a single database instance is
returned for a given path. Subsequent calls to openDatabase with the
same path will return the same instance, and will discard all other
parameters such as callbacks for that invocation.
Implementation
Future<Database> openDatabase(String path,
{int? version,
OnDatabaseConfigureFn? onConfigure,
OnDatabaseCreateFn? onCreate,
OnDatabaseVersionChangeFn? onUpgrade,
OnDatabaseVersionChangeFn? onDowngrade,
OnDatabaseOpenFn? onOpen,
String? password,
bool readOnly = false,
bool singleInstance = true}) {
final options = SqlCipherOpenDatabaseOptions(
version: version,
onConfigure: onConfigure,
onCreate: onCreate,
onUpgrade: onUpgrade,
onDowngrade: onDowngrade,
onOpen: onOpen,
password: password,
readOnly: readOnly,
singleInstance: singleInstance);
return databaseFactory.openDatabase(path, options: options);
}