create<T> method
Future<CombineInfo>
create<T>(
- IsolateEntryPoint<
T> entryPoint, { - T? argument,
- String? debugName,
- bool errorsAreFatal = true,
- RootIsolateToken? isolateToken,
override
Implementation
@override
Future<CombineInfo> create<T>(
IsolateEntryPoint<T> entryPoint, {
T? argument,
String? debugName,
bool errorsAreFatal = true,
RootIsolateToken? isolateToken,
}) async {
final receivePort = ReceivePort();
final isolate = await Isolate.spawn<_IsolateSetup<T>>(
_runInIsolate<T>,
_IsolateSetup<T>(
receivePort.sendPort,
entryPoint,
isolateToken ?? _lastUsedIsolateToken,
argument,
),
debugName: debugName,
errorsAreFatal: errorsAreFatal,
);
final receivePortStream = receivePort.asBroadcastStream().cast<Object?>();
final SendPort sendPort = await receivePortStream.first as dynamic;
final isolateMessenger = NativeInternalIsolateMessenger(
sendPort,
receivePortStream,
);
final binaryMessengerMiddleware = UIBinaryMessengerMiddleware(
ServicesBinding.instance.defaultBinaryMessenger,
isolateMessenger,
)..initialize();
return CombineInfo(
isolate: NativeCombineIsolate(
isolate,
() {
binaryMessengerMiddleware.dispose();
isolateMessenger.markAsClosed();
},
),
messenger: isolateMessenger.toIsolateMessenger(),
);
}