定义
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的官方插件就是这样开发的。
网友评论