Вы уже указали, как отправлять простые данные, используя SendPort.send
. Фактически, вы только способны отправлять примитивные типы данных , т.е. null, num, bool, double, String
, как описано в документации.
Я завершу ваш пример в следующем.
import 'dart:isolate';
main() async {
final receivePort = ReceivePort();
await Isolate.spawn(echo, receivePort.sendPort);
final Stream receivePortStream = receivePort.asBroadcastStream();
receivePortStream.listen((message) {
if (message is String) {
print('Message from listener: $message');
} else if (message is num) {
print('Computation result: $message');
}
});
final firstMessage = await receivePortStream.first;
print(firstMessage);
}
echo(SendPort sendPort) {
sendPort.send('hello');
sendPort.send('another one');
final computationResult = 27 * 939;
sendPort.send(computationResult);
}
Обратите внимание, что вы хотите просто отправить 'hello'
, а не какой-либо другой ReceivePort
, который даже не будет работать, поскольку не является примитивным значением.
В моем примере я также настроил другого слушателя, который будет обрабатывать дальнейшие сообщения.
Кроме того, мне нужно было создать переменную receivePortStream
в качестве широковещательного потока, чтобы иметь возможность прослушивать ее и для получения первого сообщения. Если вы попытаетесь запустить ReceivePort.listen
и ReceivePort.first
на одном и том же ReceivePort
, вы получите исключение.