背景
前面介绍了如何将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的错误,需要重新命名。
至此,一个完整的无冲突的本地化插件完成了,同时插件也基本上失去了和第三方代码同步的可能性,或者很麻烦,只能自己维护了。