定义
Fluttify是一个可以为原生SDK生成Dart接口的一个工具
github地址:
https://github.com/fluttify-project
为啥用Fluttify
- 常规插件开发方式(Native厚,Dart薄)
- Fluttify插件开发方式(Native薄,Dart厚)
- 两端原生接口做抽象的工作一定要放到Dart端这边来做,而不是在原生端实现好接口,然后在Dart端做一层薄的抽象,应该是Dart端一定要厚,原生端一定要薄。
- 原生端 : View类需要生成对应的
PlatformView,然后使用MethodChannel将Dart/Native连接在一起 -
Fluttify的目标是解决开发者只懂一个端或者两端都不懂时,可以借助Fluttify生成的Dart接口进行开发,从而屏蔽了原生代码。
原理介绍
antlr提供了很好的抽象层去遍历源文件,解析代码不再是难题。而且antlr提供了非常多的语法文件,这其中包括了java,objective-c,以及后续Flutter for web和Flutter Desktop需要的语法文件,这为Fluttify的后续发展铺平了道路。
Fluttify最核心的原理就是经过antlr解析之后,产生一个结构化的SDK表示,再根据这个SDK表示生成Flutter插件工程。
案例分析
高德地图中,提供了在地图上显示标记的能力,在Android端这个标记叫Marker,在iOS端叫Annotation
在Android端,只需要一步,调用AMap::addMarker(MarkerOption)即可。所有的配置项都在MarkerOption中,并且添加完成后会返回对应的Marker对象供你操作。
在iOS端,需要三步:
- 调用
MAMapView::addAnnotation(MAAnnotation); - 调用
MAMapView::delegate配置回调,一般都配置成self,因为delegate是弱引用;
实现 -
MAMapViewDelegate::mapView:viewForAnnotation,根据第一步中的MAAnnotation配置MAPinAnnotationView并返回MAPinAnnotationView的实例,在Android中一次性配置的标记参数被分散在了MAAnnotation中和MAPinAnnotationView中; - 在有了
Fluttify之后,所有的这些不一致都可以放到Dart端这边来调度,Native代码只负责输出。
常规的开发方式是把功能实现下沉到原生端,然后再在Dart端对封装好的原生方法进行一层薄的抽象。这种开发方式在两端SDK接口设计一致时,碰到的阻力会比较小,比如Google Map的官方插件就是这样开发的。











网友评论