我正试图(通过我的意思是创建一个新的)一个类的实例。这就是我所做的:
file_one.dart
import 'dart:isolate';
void main() {
SendPort sendPort = spawnUri('file_two.dart');
sendPort.call('get new instance')
.then(print);
}
file_two.dart
import 'dart:isolate';
import 'dart:mirrors';
class TestClass {}
void main() {
port.receive((message, SendPort replyTo) {
MirrorSystem current = currentMirrorSystem();
LibraryMirror isolate = current.isolate.rootLibrary;
Map classes = isolate.classes;
ClassMirror test = classes[const Symbol('TestClass')];
TestClass testClass = test.newInstance(const Symbol(''), []).reflectee;
replyTo.send(testClass);
});
}
它什么都不打印,但如果我发送一个字符串,例如'SomeString',它会打印'SomeString'。任何解决方法?
答案 0 :(得分:4)
您无法通过端口发送testClass
,因为根据dart:isolate - Concurrency with Isolates:
消息的内容可以是以下任何内容:
- 原始值(null,num,bool,double,String)
- SendPort的一个实例
- 其元素为上述任何一个的列表或地图,包括其他列表和地图
- 在special circumstances中,任何类型的对象
还有an issue to allow Transferable Objects for Dart's Isolates可能会在将来改变这种行为。