DriftIsolate.inCurrent constructor
- DatabaseOpener opener, {
- bool killIsolateWhenDone = false,
- bool serialize = false,
Creates a DriftIsolate in the Isolate.current isolate. The returned DriftIsolate is an object than can be sent across isolates - any other isolate can then use DriftIsolate.connect to obtain a special database connection which operations are all executed on this isolate.
When killIsolateWhenDone
is enabled (it defaults to false
) and
shutdownAll is called on the returned DriftIsolate, the isolate used
to call DriftIsolate.inCurrent will be killed.
Internally, drift uses ports from dart:isolate
to send commands to an
internal server dispatching database actions.
In most setups, those ports can send and receive almost any Dart object.
In special cases though, the platform only supports sending simple types
across send types. In particular, isolates across different Flutter
engines (such as the ones spawned by the workmanager
package) are
unable to handle most objects.
To support those setups, drift can serialize its internal communication
channel to only send simple types across isolates. The serialize
parameter, which is enabled by default, controls this behavior.
In most scenarios, serialize
can be disabled for a considerable
performance improvement.
Implementation
factory DriftIsolate.inCurrent(DatabaseOpener opener,
{bool killIsolateWhenDone = false, bool serialize = false}) {
final server = RunningDriftServer(Isolate.current, opener(),
killIsolateWhenDone: killIsolateWhenDone);
return DriftIsolate.fromConnectPort(
server.portToOpenConnection,
serialize: serialize,
);
}