Flutter Flatter MissingPluginException具有多个插件
最近我一直在使用一些flutter插件。许多插件都工作得很好,但我多次遇到令人沮丧的错误,通常导致放弃插件 这是我得到的最后一个,带有:Flutter Flatter MissingPluginException具有多个插件,flutter,Flutter,最近我一直在使用一些flutter插件。许多插件都工作得很好,但我多次遇到令人沮丧的错误,通常导致放弃插件 这是我得到的最后一个,带有: E/flatter(24758):[错误:topaz/lib/tonic/logging/dart_ERROR.cc(16)]未处理的异常: E/Flatter(24758):缺少PluginException(未找到通道时间表\u通知\u应用程序上的方法getIconResourceId的实现) E/flatter(24758):#0 MethodChann
E/flatter(24758):[错误:topaz/lib/tonic/logging/dart_ERROR.cc(16)]未处理的异常:
E/Flatter(24758):缺少PluginException(未找到通道时间表\u通知\u应用程序上的方法getIconResourceId的实现)
E/flatter(24758):#0 MethodChannel.invokeMethod(包:flatter/src/services/platform_channel.dart:278:7)
E/flatter(24758):在我的main.dart
文件中
更改行import'package:schedule_notifications_example/time_picker.dart'代码>导入导入“时间选择器.dart”代码>来解决我从Android Studio得到的错误
在main.dart
旁边创建一个文件time\u picker.dart
,并将
在androidstudio中执行项目并获得上述错误
启动颤振控制台并进入我的项目目录
在控制台中执行命令flatter clean
,flatter upgrade
,flatter packages get
在控制台中执行命令flatter run
,仍然会得到相同的错误
那么,到底发生了什么?对于某些开发人员或某些项目,哪些插件会产生这种行为?我做错了什么?
类似问题的示例:
好吧,我正在发布我的发现,以防将来对某人有所帮助。但我仍然对进一步的解释感兴趣
因此,为了使插件正常工作,我必须在中打开文件MainActivity.java
。在那里,我注意到一些我自己的项目中没有的行:
MethodChannel methodChannel = new MethodChannel(getFlutterView(), "schedule_notifications_app");
methodChannel.setMethodCallHandler(new MethodChannel.MethodCallHandler() {
@Override
public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
if (methodCall.method.equals("getIconResourceId")) {
result.success(R.mipmap.ic_launcher);
}
}
});
当我将这些行复制并粘贴到我自己的MainActivity.java
文件中(使用正确的导入)时,我的项目终于成功了
您会注意到,在main.dart
中,我们有以下几行:
static const _platform = const MethodChannel('schedule_notifications_app');
及
这些链接到MainActivity.java
中的新行。这就是问题的根源
执行这些步骤会使插件正常工作,但我不确定这是好的还是糟糕的做法。如果这真的是我们应该做的,我必须说这并不明显!我认为至少插件安装文档应该解释它我也有同样的问题,我花了一段时间才明白为什么会发生这种情况。
解决方案很简单,只需关闭应用程序并运行一个新插件。当您添加新插件时,您需要重新构建应用程序,热重新启动不会构建应用程序,并且您新添加的插件不会包含在您的项目中,除非重新构建。在我的情况下,我(错误地)从MainActivity.kt
(在onCreate
hook内)
可能是个错误,但花费了我很多时间。希望可以帮助别人。在一个Fatter android项目中花费了12个小时的持续努力来解决这个问题后…最终解决了-受“@rahulserver”解决方案的启发,如下所示
只需在“MainActivity.java”中合并以下代码
注意:MainActivity扩展了flatterActivity执行flatter clean
和flatter pub get
。在pubspec.yaml
文件中添加任何插件语句后,您需要执行flatter packages get
命令。停止运行应用程序,卸载然后重新生成对我来说很有效。我在发布时遇到了同样的问题对于MainActivity.kt,我有:包com.example.komerso import androidx.annotation.NonNull;import io.flatter.embedding.android.flatterActivity import io.flatter.embedding.engine.flatterengine import io.flatter.plugins.GeneratedPluginRegistrant类MainActivity:flatterActivity(){override fun configureflatterengine(@NonNull flatterengine:flatterengine){GeneratedPluginRegistrant.registerWith(flatterengine);}}我是否遗漏了什么?这修复了我的问题,似乎如果我们重写“configureflatterengine”,此方法需要在结尾显式调用。请提供MainActivity.kt
的完整代码。这是否回答了您的问题?
static const _platform = const MethodChannel('schedule_notifications_app');
iconResourceId = await _platform.invokeMethod('getIconResourceId');
GeneratedPluginRegistrant.registerWith(this)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this.getFlutterEngine());
}