Flutter:从本机代码生成的隔离调用插件时出现 MissingPluginException

Posted

技术标签:

【中文标题】Flutter:从本机代码生成的隔离调用插件时出现 MissingPluginException【英文标题】:Flutter: MissingPluginException when calling plugin from isolate spawned by native code 【发布时间】:2021-11-26 10:52:23 【问题描述】:

我正在构建一个 Flutter 应用程序,它能够在设备连接到另一个蓝牙设备时执行一些操作。这个应用程序应该可以在 androidios 上运行,但为了简单起见,我将在这篇文章中专注于 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 插件(如 sqflitepackage_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

如何从颤动中正确调用android本机代码(android/IOS)?

在 Android Studio 中构建文件时出现颤振错误