Flutter:从本机代码生成的隔离调用插件时出现 MissingPluginException
Posted
技术标签:
【中文标题】Flutter:从本机代码生成的隔离调用插件时出现 MissingPluginException【英文标题】:Flutter: MissingPluginException when calling plugin from isolate spawned by native code 【发布时间】:2021-11-26 10:52:23 【问题描述】:我正在构建一个 Flutter 应用程序,它能够在设备连接到另一个蓝牙设备时执行一些操作。这个应用程序应该可以在 android 和 ios 上运行,但为了简单起见,我将在这篇文章中专注于 Android。此外,无论应用程序是在前台、后台还是被终止,这都必须有效。
这是应用程序的架构:
-
我有一个 Android 原生代码,它通过
BroadcastReceiver
注册蓝牙事件。
我按照本教程设置了Android代码和Flutter代码之间的通信:https://medium.com/@chetan882777/initiating-calls-to-dart-from-the-native-side-in-the-background-with-flutter-plugin-7d46aed32c47。
当AndroidBroadcastReceiver
被蓝牙事件触发时,信息被发送到Flutter代码(即使应用在后台或者被杀)。 创建了一个 Flutter 隔离来处理 Flutter 代码。
一切运行良好。 Flutter代码被调用,我可以使用print(data)
来记录Android代码提供的数据。
当我想从隔离中调用任何 Flutter 插件(如 sqflite
、package_info_plus
、...)时,事情变得更加棘手。我每次都会收到这个错误:
[错误:flutter/lib/ui/ui_dart_state.cc(199)] 未处理的异常: MissingPluginException(找不到方法 xxx 的实现) 频道 yyy)
我了解生成的隔离无法原生运行 Flutter 插件。有一些帖子(Unable to understand Flutter Isolate workaround for "'Window_sendPlatformMessage' (4 arguments) cannot be found" error、https://github.com/flutter/flutter/issues/13937)解释了如何使用解决方法或像https://pub.dev/packages/flutter_isolate 这样的插件来创建可以运行 Flutter 插件的隔离。 但是,我无法使用此包创建隔离,因为隔离是从 Android 代码创建的。
谁能告诉我如何实现这一目标?有没有办法从原生代码创建的隔离中使用 Flutter 插件?
非常感谢您
【问题讨论】:
我的回答能解决你的问题吗?如果是这样,您可以接受答案并奖励赏金 我也有类似的问题。你能找到任何解决方案吗? ***.com/questions/69522573/… 【参考方案1】:听起来您创建 Flutter 隔离的方式可能与您的目标不兼容。有一些解决方案可以将 Flutter 与原生 Android/iOS 项目集成,例如 flutter_boost(免责声明:我没有尝试过,不确定好坏;您可能还会找到许多其他替代方案,这只是一个示例)。您可以使用它来创建 Flutter 环境。由于上述解决方案允许一些 Android 代码打开一个新的正常 Flutter 页面,并且该页面中的 Flutter 代码可以做任何事情(当然包括调用 native - 否则像 flutter_boost 这样的东西真的没用),这应该可以工作。
【讨论】:
以上是关于Flutter:从本机代码生成的隔离调用插件时出现 MissingPluginException的主要内容,如果未能解决你的问题,请参考以下文章
在 Flutter 中调用 Firebase 函数时出现 CloudFunctionsException
(已解决)eclipse使用mooctest插件时出现未在本机找到Maven配置
(已解决)eclipse使用mooctest插件时出现未在本机找到Maven配置
Flutter:尝试向 FlutterEngine 自动注册插件,但找不到并调用 GeneratedPluginRegistrant