由于无法从另一个隔离中调用顶级异步函数,因此示例将尝试从另一个隔离中访问SharedPreferences / Document-path值,因为获取实例需要“等待”。
就我而言,我正在使用flutter_downloader,在另一个隔离中下载,下载完成后,将立即调用一种加密方法,该方法会将结果保存在文档路径path_provider's {{1}中}返回需要等待的未来。我已经使加密函数成为异步函数,并且永远不会同时使用getApplicationDocumentsDirectory()
和compute
来调用它,以便它在另一个隔离中计算加密。
答案 0 :(得分:1)
您的问题可能是在隔离中没有可用的插件,因此从隔离中调用path_provider
和shared_preferences
时不起作用。
如果需要getApplicationDocumentsDirectory()
,则可以在启动隔离区之前确定该路径,并将其作为消息传递给隔离区。这样,您就可以在隔离中找到可用路径,并可以将文件保存在那里。确实不可能访问shared_prefs,只有在隔离完成后才能执行此操作。
有些项目,例如https://pub.dev/packages/flutter_isolate,试图使插件在隔离中可用。您可以进行探索,看看是否满足您的需求。
专门针对flutter_downloader,自述文件中有一个示例,该示例显示了如何在处理下载回调的后台隔离与应用程序的主要隔离之间进行通信。
基本上,您需要将一条消息传递到PleaseGiveMeTheApplicationDocumentsDirectory
之类的主要隔离区,然后用HereYourGoThisIsTheApplicationDocumentsDirectory
答复该消息。
您可以使用IsolateNameServer.lookupPortByName
获取主要隔离区的SendPort
并将其传递给背景隔离区的SendPort
,然后使用正确的路径进行回答。一旦双方都知道将消息发送到哪里,您就可以传递任何内容,也可以传递一条消息,从而触发主要隔离区中的shared_preferences
使用情况。