@@ -18,7 +18,8 @@ abstract class PortClient {
1818class ParentPortClient implements PortClient {
1919 late Future <SendPort > sendPortFuture;
2020 SendPort ? sendPort;
21- ReceivePort receivePort = ReceivePort ();
21+ final ReceivePort _receivePort = ReceivePort ();
22+ final ReceivePort _errorPort = ReceivePort ();
2223 bool closed = false ;
2324 int _nextId = 1 ;
2425
@@ -30,7 +31,7 @@ class ParentPortClient implements PortClient {
3031 sendPortFuture.then ((value) {
3132 sendPort = value;
3233 });
33- receivePort .listen ((message) {
34+ _receivePort .listen ((message) {
3435 if (message is _InitMessage ) {
3536 assert (! initCompleter.isCompleted);
3637 initCompleter.complete (message.port);
@@ -57,6 +58,17 @@ class ParentPortClient implements PortClient {
5758 }
5859 close ();
5960 });
61+ _errorPort.listen ((message) {
62+ var [error, stackTrace] = message;
63+ print ('got an error ${initCompleter .isCompleted } $error ' );
64+ if (! initCompleter.isCompleted) {
65+ if (stackTrace == null ) {
66+ initCompleter.completeError (error);
67+ } else {
68+ initCompleter.completeError (error, StackTrace .fromString (stackTrace));
69+ }
70+ }
71+ });
6072 }
6173
6274 Future <void > get ready async {
@@ -94,20 +106,22 @@ class ParentPortClient implements PortClient {
94106 }
95107
96108 RequestPortServer server () {
97- return RequestPortServer (receivePort .sendPort);
109+ return RequestPortServer (_receivePort .sendPort);
98110 }
99111
100112 void close () async {
101113 if (! closed) {
102114 closed = true ;
103115
104- receivePort.close ();
116+ _receivePort.close ();
117+ _errorPort.close ();
105118 _cancelAll (const ClosedException ());
106119 }
107120 }
108121
109122 tieToIsolate (Isolate isolate) {
110- isolate.addOnExitListener (receivePort.sendPort, response: _closeMessage);
123+ isolate.addErrorListener (_errorPort.sendPort);
124+ isolate.addOnExitListener (_receivePort.sendPort, response: _closeMessage);
111125 }
112126}
113127
0 commit comments