错误:flutter/runtime/dart_vm_initializer.cc(41) 未处理的异常:MissingPluginException(在通道上找不到方法加密的实现)

ERROR:flutter/runtime/dart_vm_initializer.cc(41) Unhandled Exception:MissingPluginException(No implementation found for method encryption on channel)

提问人:Judah Michael 提问时间:10/11/2023 最后编辑:Judah Michael 更新时间:10/17/2023 访问量:289

问:

我在 Android 中使用 add to app flutter 模块。当我尝试使用 methodchannel 从 Android 使用方法时,我总是遇到这样的错误

[错误:flutter/runtime/dart_vm_initializer.cc(41)]未处理 异常:MissingPluginException(在通道上找不到方法加密的实现) #0 MethodChannel._invokeMethod (软件包:flutter/src/services/platform_channel.dart:308:7) #1 _WhitePageState._加密 (包:demoflutter/ui/pages/white_page.dart:33:21)

这是我的 Flutter 代码:

var channelName = const MethodChannel("com.bca.msb/encryption");

  final emailController = TextEditingController(text: '');
  final cardnumberController = TextEditingController(text: '');
         Future<void> _encryption() async{
          String encryptedCN;
          String encryptedEM;
            try{
          final String cM = await channelName.invokeMethod("encryption", {'cardNumber' : cardnumberController.text});
          encryptedCN = cM;
        
          final String eM = await channelName.invokeMethod("encryption", 
      {'email': emailController.text});
          encryptedEM = eM;
          print("$encryptedCN $encryptedEM");
        }on PlatformException catch(e){
        
            encryptedCN = 'Failed CN ${e.message}';
            encryptedEM = 'Failed Em ${e.message}';
        }
        
            setState(() {
              cardnumberController.text = encryptedCN;
              emailController.text = encryptedEM;
            });
          }

这是我的Android代码:

  class Encryption: FlutterActivity() {
        private val channelName = "com.bca.msb/encryption";
    
        override fun configureFlutterEngine(flutterEngine: FlutterEngine) 
       {
            super.configureFlutterEngine(flutterEngine)
    
            MethodChannel(flutterEngine.dartExecutor.binaryMessenger,channelName).setMethodCallHandler { call, result ->
                var args = call.arguments as Map<String, String>
                var CN = args["cardNumber"]
                var EM = args["email"]
                if (call.method == "encryption"){
                    if (args.containsKey("cardNumber")){
                        val encryptCN = CN?.let { encryption(it) }
    
                        result.success(encryptCN)
                    }else if (args.containsKey("email")) {
                        val encryptEM = EM?.let{encryption(it)}
                        result.success(encryptEM)
                    }
                }else {
                    result.notImplemented()
                }
    
            }
        }
    
        private fun encryption(str : String): String {
            var cM = ""
    
            cM = str.encrypt().toString()
       
            return cM
        }
    }

我该如何解决此错误?

Android Flutter 错误处理 flutter-method-channel flutter-add-to-app

评论

0赞 Safal Shrestha 10/11/2023
请发布代码片段而不是图像。
0赞 Judah Michael 10/11/2023
谢谢@SafalShrestha你能帮我解决这个问题吗?
0赞 Safal Shrestha 10/11/2023
频道名称是否匹配?你能检查一次 flutter 和 android 端的频道名称是否匹配吗?
0赞 Judah Michael 10/12/2023
我在添加到应用程序上使用了这种方法通道,因此我可以在本机代码 android 中使用方法。我已经匹配了频道名称,但仍然出错。我认为这是因为我使用添加到应用程序。
0赞 Safal Shrestha 10/12/2023
我认为这个线程可能会对您有所帮助。祝你好运

答:

0赞 Avaiya Kashyap 10/11/2023 #1

停止您的应用程序并重新启动或卸载并重新安装它可能会解决问题!:]

评论

0赞 Judah Michael 10/12/2023
我已经做过很多次了:)但仍然得到同样的错误。我使用 MethodChannel 将 Flutter 添加到 Android 应用程序。不在 Flutter 项目中
0赞 Judah Michael 10/17/2023 #2

所以我找到了解决问题的方法,

当你想调用某个方法或想在现有 Android 中使用某个方法时(注意:不是 Flutter 中的 Android 包,而是现有的 Android 应用程序)。您必须将 Android 和 Flutter 将使用的引擎等同起来。我的情况的解决方案如下。

btnRegisterNow.setOnClickListener {
        startActivity(
            context?.let { it1 ->
                    FlutterActivity
                        .NewEngineIntentBuilder(Encryption::class.java)
                        .initialRoute("/")
                        .build(it1)
            }
        )
    }

上面的代码会在你第一次想从 Android 页面切换到 Flutter 时创建相同的引擎。上面的代码会在你第一次想从 Android 页面切换到 Flutter 时创建相同的引擎。上面的代码将从 Encryption 类构建相同的引擎,其中该类用于处理从 Flutter 发送的数据生成的 methodchannel,之后 MethodChannel 将成功使用并显示预期的结果。MethodChannel 已被证明可以在实现添加到应用程序的应用程序中工作。别忘了像这样在清单中注册加密活动

 <activity
    android:name=".base.Encryption"
    android:windowSoftInputMode="adjustResize"
    android:exported="false">
  <intent-filter>
    <action android:name="com.example.msb.base.ACTION"/>
    <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>
</activity>

就这样,谢谢