提问人:Judah Michael 提问时间:10/11/2023 最后编辑:Judah Michael 更新时间:10/17/2023 访问量:289
错误: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)
问:
我在 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 中的 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>
就这样,谢谢
评论