大型连续剧之Flutter采坑记
1. 两个插件之间冲突(target has frameworks with conflicting names)
-
问题背景:本地插件和项目引用的插件中引用的插件之间有冲突,如:本地插件amap_location_flutter_plugin和远程插件amap_map_fluttify
-
解决思路:
1、将amap_map_fluttify放到amap_location_flutter_plugin中的dependency_overrides下面,如果需要,可以在本地插件里面将amap_map_fluttify内容export到项目中使用;最终发现在iOS中pod根本不会下载map的库,这个overrides只对当前module有效,所以该思路不通;2、将两个插件手动合并成一个插件来避免冲突,我是将amap_location_flutter_plugin中的内容放到了fluttify中,因为location中的内容较少也比较简单。在合并的过程中碰到了两个问题:1. 注册插件的问题;2. 包引用的问题;这个两个问题主要在Android项目上。
在iOS很好解决因为我本身是iOS开发。iOS里面引用包的方式变成本地引用的方式就好,注册就直接在map中的register方法中调用location中plugin类的register就好了;
在Android里面就有意思了,因为注册插件的时候有两种方式,第一种是用register,第二种就是onAttachedToEngine,而安卓就是用的第二种,这好像是新版本的方式,也是在map的插件类中的onAttachedToEngine中binding.getFlutterEngine().getPlugins().add(new AmapLocationFlutterPlugin());
关于包引用在Android根本不用改,很丝滑;
在解决插件注册的时候了解到,flutter和原生交互的通道包括MethodChannel和EventChannel,前者是双向的交互,后者是单向的,既只支持原生端到flutter端,使用场景比如定位的实时获取,原生端将位置信息不停的将数据发送给flutter;
2. 将flutter老版本项目升级到2.0以上
- 大概是以下几步:
- 主要是适配非空安全,这个在项目运行配置里面additional run args: --no-sound-null-safety;
- 升级一些版本低的插件,pub get的时候会有提示,还有一种办法就是在项目目录下用命令flutter pub add 库名,这种方式会自动下载一个合适的版本;
- 其他问题,比如我就碰到了问题1的插件冲突问题;