1

Flutter 开发插件包Plugin

最近公司的项目采取了跨平台技术Flutter来开发,也是我们技术总监推荐我们尝试使用。前期也做了一些测试和试验,Flutter的实现功能和界面开发方面个人感觉都比原生要省事不少。在我们进行的这个项目开发过程中也是一个不断学习和踩坑的过程。有些功能避免不了和原生系统API的交互,比如硬件设备调用等等方面,这就需要Flutter+iOS+Android混编的方案。于是某些功能需要做插件包,插件包提供一个Flutter统一接口进行原生iOS代码和安卓代码。下面是个计步器插件包的例子:

  • 创建一个文件夹GetStepCount来存放插件包代码,用终端cd到文件夹路径下:
  • flutter create -t plugin get_step_count 命令创建项目,注意get_step_count是插件包的名称,而且要用下划线小写格式,不能用驼峰风格,否则报错:

图片描述

  • 创建成功之后会有一个插件包工程文件目录:
    图片描述

android目录下存放是安卓的java原生代码:

图片描述
上图中里面java文件是一个获取系统版本的实现文件例子

iOS 目录下存放的是OC的原生代码:

图片描述
上图中的.m实现文件是OC版的获取系统版本的实现文件例子
example文件是提供的一个能运行的demo,以供演示如何使用做的插件。

  • 下面开始填入我们需要做的原生功能代码,在添加我们需要的原生功能代码之前,需要对这个插件项目进行 build :
    cd 到 example文件路径下,安卓build命令 flutter build apk ,iOS build命令 flutter build ios --no-codesign
  • iOS 插件代码编写:
    经过build之后我们进入插件包工程目录里的example文件夹下,运行 example/ios/Runner.xcworkspace文件,xcode打开的目录如下图:
    图片描述
    上图中的Cleasses中的OC文件就是实现原生功能的文件,把要实现的功能文件写在Classes下就可以了。如果实现功能需要第三方库的支持,在上面的Podfile中加入三方库依赖。
  • 安卓 插件代码编写:
    同样经过了build之后打开example里面的工程,从AndroindStudio里能看到/java/com.example.get_step_count/ 目录里就是安卓需要编码的地方。
  • 关于Flutter和 原生iOS/Android进行通信这里不再赘述,建立好Flutter与原生之间的通道就可以相互调用了。
  • 最后推荐一下阿里巴巴的闲鱼Flutter技术分享系列--闲鱼语雀https://www.yuque.com/xytech,阿里在Flutter跨平台方案中已经践行了大概快三年的时间,现在把成果拿出来(现在的闲鱼应用是用Flutter进行重构和业务支持的)进行分享也是值得敬仰的精神。
  • 本人也是刚用Flutter,如果有什么不对或者建议请提出指点或交流,谢谢。

wangshuaiyu
28 声望29 粉丝