0 purchases
drift flutter
drift_flutter #
drift_flutter is a utility package for drift
databases in Flutter apps.
The core drift package is Dart-only, meaning that it can't depend on Flutter
or any Flutter-only packages.
This complicates the setup, as all Flutter apps using drift have to introduce
Flutter-specific code to setup drift databases.
This package solves that problem by providing drift extensions for Flutter,
making it easy to open databases.
Features #
This package provides a single method: driftDatabase, which returns a drift
database implementation suitable for the current platform. It has a single
required parameter, the name of the database to use.
To use this package, use the method to open your database class:
import 'package:drift/drift.dart';
import 'package:drift_flutter/drift_flutter.dart';
@DriftDatabase(...)
final class MyAppDatabase extends _$MyAppDatabase {
// Keeping a custom constructor is useful for unit tests which may want to
// open an in-memory database only.
MyAppDatabase(super.e);
MyAppDatabase.defaults(): super(driftDatabase(name: 'app_db'));
}
copied to clipboard
Web support #
Running sqlite3 on the web requires additional sources which currently have to
be downloaded into the web/ folder of your Flutter application.
These are the compiled sqlite3.wasm module and a drift_worker.js worker
used to share databases across tabs if possible.
Obtaining these files is described here.
Sharing databases between isolates #
In some setups, for instance when using WorkManager, you may have two
independent isolates running your app and a background service. These may have
to share a database without blocking each other. This package can internally
use the IsolateNameServer to spawn a dedicated database isolates shared
between other application isolates. To enable this feature, set
shareAcrossIsolates to true in DriftNativeOptions:
MyAppDatabase.defaults(): super(
driftDatabase(
name: 'app_db',
native: DriftNativeOptions(
shareAcrossIsolates: true,
),
)
);
copied to clipboard
When the option is enabled, drift_flutter will create a dedicated database
isolate that starts when the first driftDatabase() call connects and stops
when all attached databases have been closed (note that you need to explicitly
close() the databases to stop the server, the respective isolates shutting
down is not enough).
Behavior #
On native platforms (Android, iOS, macOS, Linux and Windows), driftDatabase uses
getApplicationDocumentsDirectory() from package:path_provider as the folder to
store databases.
Inside that folder, a $name.sqlite file is used for the database.
To use a custom path, the DriftNativeOptions.databasePath parameter can be used.
On the web, drift's web support is used to open
the database.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.