美文网首页Flutter学习
Flutter-Native->Dart接口生成引擎Flutti

Flutter-Native->Dart接口生成引擎Flutti

作者: StevenHu_Sir | 来源:发表于2019-12-03 18:16 被阅读0次

定义

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提供了非常多的语法文件,这其中包括了javaobjective-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的官方插件就是这样开发的。

相关文章

网友评论

    本文标题:Flutter-Native->Dart接口生成引擎Flutti

    本文链接:https://www.haomeiwen.com/subject/mwgfgctx.html