发布应用程序中的 Flutter MissingPluginException(在通道上找不到方法 getAll 的实现 ...)
Posted
技术标签:
【中文标题】发布应用程序中的 Flutter MissingPluginException(在通道上找不到方法 getAll 的实现 ...)【英文标题】:Flutter MissingPluginException(No implementation found for method getAll on channel ...) in release app 【发布时间】:2021-05-06 03:59:12 【问题描述】:我收到 MissingPlugin 错误。我发现了很多关于该错误的帖子。但我的情况有点不同。 首先,我的项目在模拟器中运行良好,只有当我在物理 android 上运行我的发布应用程序时才会出现错误。 其次,这个错误不仅仅与一个包有关。我第一次遇到错误 MissingPluginException(在通道 plugins.flutter.io/shared_preferences 上找不到方法 getAll 的实现) 在我输入代码后,我发现只能处理 shared_preferences 的问题。然后我得到了错误 MissingPluginException(在通道 plugins.flutter.io/package_info 上找不到方法 getAll 的实现) 显然,错误不仅仅与 shared_preferences 之类的包相关联。
有什么想法吗?我该如何解决这个问题?
【问题讨论】:
这能回答你的问题吗? Flutter: Unhandled exception: MissingPluginException(No implementation found for method getAll on channel plugins.flutter.io/shared_preferences) 【参考方案1】:这是很多人都会犯的典型错误。 您正在尝试做的是将繁重的工作抽象为隔离,但是颤振隔离不能运行插件,除了颤振中的 api 和 dart sdk 直接。
你有几个选择。
-
有一个插件我可以推荐,它不支持所有 Flutter(3rd 方)插件,但值得一试。
https://pub.dev/packages/flutter_isolate
这个插件创建了自动封送插件工作回主隔离的隔离,而不会冒基本颤振隔离通常会抛出的运行时异常的风险。
-
只运行繁重进程的源代码,您可以在基本的flutter隔离中运行,只需要直接使用flutter & dart sdk api。依赖于插件的其余代码将需要中继回主隔离,并且 UI 将不得不使用 FutureBuilder 等待结果
【讨论】:
我还不太明白。我没有找到另一个帖子提到的隔离解决方案。我需要阅读有关隔离的更多信息。 请在flutter repo上查看这个github问题。简而言之,您不能在隔离内调用 3rd 方插件代码。 (仅在主要隔离中)。 github.com/flutter/flutter/issues/13937 你的主要隔离是你运行你的应用程序、你的小部件、你的用户界面,以及构成你的应用程序的一切 我现在记得了。我认为我不应该有隔离问题。当我的应用程序加载时,我没有单独的隔离。另外,当我使用构建工具 3.5.1 时它是如何工作的 嗯...你改变了 gradle build 版本?有趣的。您是否使用插件来生成我建议的隔离?如果是这样,那么他们可能已经进行了更新并支持了这个库。至于为什么只更改构建版本来解决这个问题,听起来要么你没有在(非主)隔离上调用任何插件 api,要么是别的东西【参考方案2】:尝试了一些在网上找到的不同解决方案,例如清理和重建。无收缩等。没有一个对我有用。
最后在build.gradle中,我改了
类路径'com.android.tools.build:gradle:4.0.0' 到 类路径'com.android.tools.build:gradle:3.5.1'
之后,apk 大小为之前的 50%,应用加载正常。
所以也许新的构建工具会有所帮助。
【讨论】:
您可能遇到了与github.com/flutter/flutter/issues/58247 和github.com/flutter/flutter/pull/71446 相关的内容以上是关于发布应用程序中的 Flutter MissingPluginException(在通道上找不到方法 getAll 的实现 ...)的主要内容,如果未能解决你的问题,请参考以下文章
Flutter中的primaryColor和primarySwatch有啥区别?