【发布时间】: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。
- 当Android
BroadcastReceiver被蓝牙事件触发时,信息被发送到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 插件?
非常感谢您
【问题讨论】:
-
我的回答能解决你的问题吗?如果是这样,您可以接受答案并奖励赏金
-
我也有类似的问题。你能找到任何解决方案吗? stackoverflow.com/questions/69522573/…
标签: flutter flutter-plugin dart-isolates