Flutter Flatter MissingPluginException具有多个插件

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

最近我一直在使用一些flutter插件。许多插件都工作得很好,但我多次遇到令人沮丧的错误,通常导致放弃插件

这是我得到的最后一个,带有:

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());
    }