解决重命名Flutter插件名后的冲突问题

2022-05-06  本文已影响0人  twj小鱼儿

背景

前面介绍了如何将Flutter第三方插件本地化修改Flutter插件名,大部情况下单独运行时很顺畅,但是。。。现实往往没这么顺利。

场景

还是以webview_flutter为例,前面我们做了一个本地化的插件webview_flutter_xx;

在我们的主工程里还引入的 flutter_html 插件,这个插件里面也引用了webview_flutter,这时候冲突就来了;

冲突一:Android包名冲突

冲突二:Android类名引用错误

冲突三:iOS文件名冲突

冲突四:iOS类名名冲突

冲突五:Flutter 渠道唯一标识名冲突

解决冲突一

在pubspec.yaml里,如下例子

flutter:
plugin:
platforms:
android:
package: io.flutter.plugins.webviewflutter.xx
pluginClass: WebViewFlutterPlugin
ios:
pluginClass: YZFLTWebViewFlutterPlugin

把adnroid package包名改为新包名,同时全局搜索(vscode/as/xcode并用)旧包名,把相关配置里的旧包名改为新包名,同时把目录也改为新包名目录,注意一个一个改,不要改错了;

android的pluginClass可以不用改;

解决冲突二

android的包名冲突导致类引用出错,在文件中一个一个改就可以了;

解决冲突三

ios的pluginClass重新命名,重新pod install生成相应的文件;

解决冲突四

这步是工作量最大的,先把ios的pluginClass重新命名,重新pod install生成相应的文件;

然后就是修改文件的文件名、类名、引用类名等;

解决冲突五

Flutter和原生通信的渠道Channel的唯一标识不能重复,否则会报check的错误,需要重新命名。

至此,一个完整的无冲突的本地化插件完成了,同时插件也基本上失去了和第三方代码同步的可能性,或者很麻烦,只能自己维护了。

上一篇下一篇

猜你喜欢

热点阅读