我有一个背景分离株试图使用平台通道。是的,Flutter 3.7+,根据背景分离株要求设置通道(包括调用BackgroundIsolateBinaryMessenger.ensureInitialized()
)。从隔离,我可以成功地调用 * 外部 * 插件通过它们的通道进行通信,一切都工作得很好。问题是当调用我自己的插件 * 内部 * 同样的项目。我不能确定在框架中根据插件的位置有什么不同的处理方式。
作为一个内部插件,工具链不会拾取它,也不会将其添加到GeneratedPluginRegistrant
中,所以我在我的FlutterActivity
中手动完成:
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
flutterEngine.plugins.add(MainPlugin())
super.configureFlutterEngine(flutterEngine)
}
字符串
我的插件是一个标准的FlutterPlugin
,也ActivityAware
和MethodCallHandler
.我试图设置通道都在更简单的形式和任务队列作为文档建议:
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
val taskQueue = binding.binaryMessenger.makeBackgroundTaskQueue()
channel = MethodChannel(binding.binaryMessenger, "com.example.foreground_test/platform", StandardMethodCodec.INSTANCE, taskQueue)
//channel = MethodChannel(binding.binaryMessenger, "com.example.foreground_test/platform")
channel.setMethodCallHandler(this)
}
型
这个插件可以从主隔离区工作,只是不能从后台隔离区工作。后者会导致常见的 MissingPluginException(No implementation found for method test on channel com.example.foreground_test/platform) 错误。
当插件在里面的时候,框架可能会有什么不同的设置?为什么这一点一开始就很重要?
1条答案
按热度按时间xvw2m8pv1#
经过大量的调查,与输入的核心Flutter开发人员,原因被确定.代码创建了一个辅助FlutterEngine,而外部插件自动关联到这两个,我自己的内部代码只注册到主引擎手动,而不是辅助.