通过 MethodChannel 传递 Isolate/ControlPort

Passing Isolate/ControlPort through MethodChannel

在我们的 flutter 应用程序中,我们正在进行一些后台处理。为此,我们需要在本机代码中创建新的 flutter isolate,这样我们就可以在 activity 未打开时 运行 编码,基于本指南:https://medium.com/@chetan882777/initiating-calls-to-dart-from-the-native-side-in-the-background-with-flutter-plugin-7d46aed32c47

现在,为了不重复代码并且不引起任何并发问题,我们还希望能够从主 flutter UI isolate 中访问后台处理 isolate。这样我们就可以从本地代码和 flutter UI 代码开始处理。

然而,native 似乎没有办法将这个 Isolate / ControlPort 传递给主 UI 端,以便它可以与之通信。有没有一种方法可以实现这一点(从本机和 UI 端与同一个 Isolate 通信)?

据我所知,这样做的唯一方法是要求本机成为双方之间的代理(将任务发送给本机,然后本机将其发送回另一端),但似乎很多一个 flutter 与另一个 flutter 交谈的麻烦。

解决这个问题的方法是 IsolateNameServer

一方可以调用 IsolateNameServer.registerPortWithName(),然后另一方可以通过 IsolateNameServer.lookupPortByName()

向该端口发送消息