????????初学flutter不久,这次在Android上集成FlutterBoost v3.0-null-safety-preview.9版本,期间过程各种种问题(网上都是3.0以下的集成问题,所以有问题只能自己慢慢磨),最后还是集成成功了。
????????提测阶段,测试发现flutter调起Android手机的打电话页面失败,调试发现报错Unhandled Exception:MissingPluginException,flutter中这个功能使用的是第三方库url_launcher,于是想到是不是自己插件注册没写,网上查资料,关于插件注册的都是FlutterBoost3.0以下的,结果花费很长时间按网上的方法各种尝试解决,包括flutter clean、pub get、pub upgrade、删缓存等等,一天过去依然没有头绪,ios端运行是正常的,所以只能确定是自己集成上有问题,有点沮丧。
????????唯一结果是定位到插件注册方法GeneratedPluginRegistrant.registerWith报错,说明插件注册是有执行,只是报错了,下图是我工程用到的flutter第三方库插件注册代码(这块代码是自动生成的):
调试运行到keyboard的注册时报错,?但是这个报错在控制台是不会输出的(好坑),于是自己加上try catch打印错误,
java.lang.NullPointerException: Attempt to invoke interface method 'void io.flutter.plugin.common.BinaryMessenger.setMessageHandler(java.lang.String, io.flutter.plugin.common.BinaryMessenger$BinaryMessageHandler)' on a null object reference
?所以,应该是这个注册失败导致后续的插件都没有继续注册,先注释掉这行代码,一行一行排查,最终发现是keyboard和screen这两个插件注册会失败,一旦失败,代码不会继续执行,之后的插件就都不注册了,先注释这两行注册代码,运行项目,发现flutter可以正常调起Android的拨打电话页面了,说明问题就出在这里,好激动!!
解决办法:
把有问题的第三方插件去掉或者尝试更换版本看看,再不行通过event事件native实现功能
感想:
flutter开发学习到现在也有两个多月了,期间碰到的问题也不少,定位问题感觉有点困难,在集成FlutterBoost的时候就感觉到了,往往问题你不好定位出现在哪里,这次碰到的问题就是注册插件失败他就没有日记提示。可能是我还太菜,感觉不是那么好用。
。
?
? ? ? ? 最后感谢这个链接的作者,在我苦苦查询资料无果时,偶然发现了他的文章,我才最终发现自己这里的问题和他是一样的
flutter 遇到MissingPluginException不要慌,百度和google都帮不了你的话,来找我! - 兰贝科技现象不知道从哪个时间点开始,突然间flutter项目就不香了。可以直接运行到手机上,但是某些功能无法使用。比如最常见的SharedPreference,比如FlutterToast,之前都是正常使用的,并且已经稳定使用很长时间了。当然,也有可能是你自己做的插件,确定没有什么问题的,突然间就无法使用了http://blog.z7ge.com/archives/flutter-missingpluginexception-bu-yao-huang
|